- HiFi műszaki szemmel - sztereó hangrendszerek
- Kormányok / autós szimulátorok topicja
- Sony MILC fényképezőgépcsalád
- NVIDIA GeForce RTX 3080 / 3090 / Ti (GA102)
- Milyen belső merevlemezt vegyek?
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- OLED TV topic
- VR topik (Oculus Rift, stb.)
- SSD kibeszélő
- Vezetékes FEJhallgatók
Hirdetés
-
Drágábban indíthat az új iPhone SE
ma 2025 tavaszán érkezhet az új SE, az Apple az 500 dolláros határig emelhet valamennyit az áron.
-
V Rising - Végre tudjuk hogy mikor érkezik a PS5-ös kiadás
gp A PC-s teljes verzió már egy ideje játszható, hamarosan konzolra is megérkezik a játék.
-
Retro Kocka Kuckó 2024
lo Megint eltelt egy esztendő, ezért mögyünk retrokockulni Vásárhelyre! Gyere velünk gyereknapon!
Új hozzászólás Aktív témák
-
Jester01
veterán
válasz alapz@j #4165 üzenetére
Ahogy a kollega írta, logikailag megsemmisül és a szabvány csak ennyit ír elő.
Az már fordítófüggő, hogy ez hogyan néz ki gépi kód szinten, de rendesen optimalizáló fordító nyilván előre lefoglalja a területet és újrahasznosítja. Mellesleg a stack kezelésnek igen minimális az overheadje hiszen csak egy-egy pointer művelet.Ha érdekel a végeredmény hogy néz ki akkor kérj assembly listát a fordítódtól vagy használd ezt a remek weboldalt.
Jester
-
Jester01
veterán
Mint rajottem, az ftell/fgetpos csak akkor mukodik "helyesen", ha mar olvastam a streambol.
Ha elso olvasas elott adom ki, akkor -20-at ad vissza, es innentol fogja egyesevel novelni/csokkenteni a poziciot minden getc/ungetc utan, nem nullatol.Ezt nehezen hiszem, és ha tényleg így van az bug.
Nekem egyébként működik linuxon, akár text akár binary módban nyitom meg a fájlt.Jester
-
Jester01
veterán
Az akkor lehet, ha elfelejtetted hozzálinkelni a math könyvtárat. Minden bizonnyal valamit panaszkodott is a fordító, legközelebb azt is írd meg nekünk, valamint keress rá az interneten is. Jelen esetben valószínűleg undefined reference hibát kaptál ami azt jelenti, a linker nem talált valami hivatkozott szimbólumot. Ilyenkor ha nem elírás történt, akkor hiányzó könyvtárak/modulok felé kell keresgélni. Konstansra azért fordulhat, mert azt szerencsés esetben a fordító kiszámolja így nincs szükség a tényleges atan implementációra.
Végül pedig a gyógymódról. Nem írtad milyen környezetet használsz, parancssoros gcc esetén -lm kapcsolót kell alkalmazni. A -l segítségével lehet függvénykönyvtárakat hozzáadni a beszédes m pedig a matek könyvtár neve. IDE környezetben meg kell keresni hol lehet további könyvtárakat (library) beállítani és ott fel kell venni a matek könyvtárat.
Jester
-
Jester01
veterán
válasz stranger28 #4198 üzenetére
Szerintem alapvetően nincs baj az int*-al, bár tény, hogy C-ben ilyen nincs de szerintem olvashatóbb. Személy szerint szigorúan követem a soronként csak 1 változó elvet, így a "hová tartozik a *" probléma nem érint.
Ja és még a beolvasásod nem bolondbiztos. Igaz, azt C-ben nehéz is csinálni, de első körben legalább a scanf visszatérési értékét ajánlott ellenőrizni.
[ Szerkesztve ]
Jester
-
Jester01
veterán
válasz alapz@j #4207 üzenetére
A kapcsos zárójel elhelyezése ízlés dolga, de az egy soros dolgok köré is erősen ajánlott kitenni őket, mivel ahogy arra dababab már rámutatott, később könnyen hibához vezethet.
Jester
-
Jester01
veterán
válasz dabadab #4234 üzenetére
Továbbá még azt is vizsgálni kellene, hogy 16 bites határon van-e éppen, mert akkor elég 1 tömb elemet írni (ez ugye akkor fontos ha az utolsó elemről van szó, mert akkor a következő már túlírja a tömböt).
Ja és nem 0x0f - shift hanem 0x10 - shift
[ Szerkesztve ]
Jester
-
Jester01
veterán
-
Jester01
veterán
Csinálsz egy ciklust ami végigmegy a tömbön (ez lesz a forrás pozíció) és egy változót ami a cél pozíciót tárolja. Ha az adott elemet meg kell tartani, akkor a forrásból a célba másolod és növeled a cél pozíciót, különben nem.
dst = 0;
for(src = 0; src < len; src++) {
if (!pred(a[src])) a[dst++] = a[src];
}[ Szerkesztve ]
Jester
-
Jester01
veterán
válasz prosoftware #4318 üzenetére
Az első az megeszi az egész sort, a második az nem (a végén a % az gondolom elírás).
Jester
-
Jester01
veterán
válasz prosoftware #4321 üzenetére
Nem ugyanazt csinálják, ha a sorban a két számon kívül még van valami és később azt is be akarod olvasni.
scanf("%d%d%*[^\n]", &a, &b);
getchar();
scanf("%d", &c);
printf("%d %d %d\n", a, b, c);Be:
1 2 3
4
Ki: 1 2 4Az első sorban a szám után bármi lehet, azt figyelmen kívül hagyja.
scanf("%d%d%", &a, &b);
scanf("%d", &c);
printf("%d %d %d\n", a, b, c);Be: 1 2 3
Ki: 1 2 3Itt a két szám után ami még a sorban volt az megmarad és a további beolvasások felhasználják. A formátumstringben az utolsó % jel pedig igenis elírás mivel annak ott semmi értelme nincs. Ugyanígy működik anélkül is, csak akkor még helyes is.
[ Szerkesztve ]
Jester
-
Jester01
veterán
válasz prosoftware #4327 üzenetére
A getchar() a sorvég jelet \n eszi meg mivel azt a scanf a [^\n] miatt nem tette meg. Persze bele lehetne oda is tenni.
Jester
-
Jester01
veterán
válasz dabadab #4424 üzenetére
Ez tényleg elég meglepő, de én is tudtam reprodukálni.
Elsőre rávágtam, hogy a java biztos elágazás-mentes kódot generál, de ha kicsit átírtam, hogy a gcc-nek is feltűnjön ez a lehetőség attól ugyan gyorsabb lett de még nem java szintű. Sőt, még durvább optimalizációval egy iterációban 8 elemet ad össze és még így is lassabb.A random tömböt egyébként kicseréltem, hogy mind a két implementáció azonos számokkal dolgozzon (és mindig ugyanazokkal).
Jester
-
Jester01
veterán
Hmm, a JIT kód nem tűnik túl okosnak, nem tudom mitől gyors:
0x00007fe2237a679a: movsd 0x10(%rbx,%rbp,8),%xmm0 ;*daload
; - Test::summUp@12 (line 11)
0x00007fe2237a67a0: movsd 0x8(%rsp),%xmm1
0x00007fe2237a67a6: addsd %xmm0,%xmm1
0x00007fe2237a67aa: inc %ebp
0x00007fe2237a67ac: ucomisd 0x20c(%rip),%xmm0 # 0x00007fe2237a69c0
; {section_word}
0x00007fe2237a67b4: movsd 0x8(%rsp),%xmm0
0x00007fe2237a67ba: ja 0x00007fe2237a67c0
0x00007fe2237a67bc: movapd %xmm0,%xmm1 ;*iinc
; - Test::summUp@26 (line 10)
0x00007fe2237a67c0: cmp %r11d,%ebp
0x00007fe2237a67c3: jge 0x00007fe2237a67cd
0x00007fe2237a67c5: movsd %xmm1,0x8(%rsp)
0x00007fe2237a67cb: jmp 0x00007fe2237a679aJester
-
Jester01
veterán
válasz don_peter #4445 üzenetére
C-ben is van strlen de csak akkor működik ha van egy lezáró 0 byte a karakterek után. Továbbá ez minden alkalommal végignézi a stringet, szóval nem valami gyors. Javasolt kézzel nyilvántartani a tömbbe rakott karakterek számát, ahogy te is tetted.
A másik probléma az gondolom a kávé hiányra vezethető vissza, mert óvodás matematika Ugye ha van egy abcd szám annak az értéke a*1000+b*100+c*10+d. Ennyi segítség már elég hozzá?
Jester
-
Jester01
veterán
-
-
Jester01
veterán
válasz don_peter #4498 üzenetére
Bináris->oktális pofon egyszerű, mivel 3 bit 1 oktális számjegyet kódol. Simán a legkisebb helyiérték felől 3 bitenként leírsz egy oktális számjegyet és kész. Feltételezem 3 bitet tudsz konvertálni, de ha nem akkor ugye a helyiértékek 4,2,1.
Bináris->hexa hasonlóan csak ott 4 bitenként haladsz.
A tízes számrendszer már külön állatfaj mivel nem kettő hatvány. Ott az általános átváltási módszert kell használni.
Jester
-
Jester01
veterán
válasz Ereshkigal #4553 üzenetére
Nem olyan nagyon jó
Mivel az OS valószínűsíthetően tiszta lappal indítja a processzed, ezért ez a memóriaszemét jó eséllyel determinisztikus lesz. Ráadásul fordítási és memóriaellenőrzési (valgrind) figyelmeztetést is okoz.Jester
-
Jester01
veterán
válasz buherton #4664 üzenetére
Hogy nem általános és nem ajánlott az nézőpont kérdése. A linux kernel például tele van vele (konkrétan 112235 darabot számoltam össze), mert erőforrás felszabadításhoz hiba után hasznos. Például:
gcm_zeroes = kzalloc(16, GFP_KERNEL);
if (!gcm_zeroes) return -ENOMEM;
err = crypto_register_template(&crypto_gcm_base_tmpl);
if (err) goto out;
err = crypto_register_template(&crypto_gcm_tmpl);
if (err) goto out_undo_base;
err = crypto_register_template(&crypto_rfc4106_tmpl);
if (err) goto out_undo_gcm;
err = crypto_register_template(&crypto_rfc4543_tmpl);
if (err) goto out_undo_rfc4106;
return 0;
out_undo_rfc4106:
crypto_unregister_template(&crypto_rfc4106_tmpl);
out_undo_gcm:
crypto_unregister_template(&crypto_gcm_tmpl);
out_undo_base:
crypto_unregister_template(&crypto_gcm_base_tmpl);
out:
kfree(gcm_zeroes);
return err;Jester
-
Jester01
veterán
válasz tototos #4671 üzenetére
De, oda lehetne:
gcm_zeroes = kzalloc(16, GFP_KERNEL);
if (!gcm_zeroes) return -ENOMEM;
err = crypto_register_template(&crypto_gcm_base_tmpl);
if (err)
{
kfree(gcm_zeroes);
return err;
}
err = crypto_register_template(&crypto_gcm_tmpl);
if (err)
{
crypto_unregister_template(&crypto_gcm_base_tmpl);
kfree(gcm_zeroes);
return err;
}
err = crypto_register_template(&crypto_rfc4106_tmpl);
if (err)
{
crypto_unregister_template(&crypto_gcm_tmpl);
crypto_unregister_template(&crypto_gcm_base_tmpl);
kfree(gcm_zeroes);
return err;
}
err = crypto_register_template(&crypto_rfc4543_tmpl);
if (err)
{
crypto_unregister_template(&crypto_rfc4106_tmpl);
crypto_unregister_template(&crypto_gcm_tmpl);
crypto_unregister_template(&crypto_gcm_base_tmpl);
kfree(gcm_zeroes);
return err;
}
return 0;Jester
-
Jester01
veterán
válasz tototos #4687 üzenetére
Általános esetben inkább kivonás mint maszkolás mert ez utóbbi nem mindig jó.
Amúgy osztási maradékot lehet még használni, de az sokkal lassabb szokott lenni.Egyébként 62 sosem lesz, hiszen maximum 59+2=61 lehet.
A while(act_sec<wait) viszont rossz, hiszen ha az act_sec 59 akkor a wait 1 lesz és bele sem megy a ciklusba.
Ami még probléma lehet, hogy esetleg éppen az aktuális másodperc végén jársz és így akár közel 1 másodpercre is zsugorodhat a várakozási idő.
Jester
-
Jester01
veterán
glibc-ben van fopencookie de az valóban nem szabványos.
Ha saját programodból akarsz mondjuk soros portra írni, akkor úgy célszerű eleve felépíteni.
Jester
-
Jester01
veterán
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Kerékpárosok, bringások ide!
- Futás, futópályák
- Politika
- Bugok, problémák a PROHARDVER lapcsaládon
- Call of Duty: Modern Warfare III (2023)
- Moderátort keresek a fórumhoz!
- Szoszo94: Xiaomi Mi Router 3G - Padavanra fel!
- Honor Magic V2 - origami
- Nintendo Switch
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- További aktív témák...
- 2 év gari: Olcsó DDR5 PC/I5 12400F/16GB/500GB M2/Suprim X RTX 3070/Futár is
- -70% HP EliteBook 850 G7:i7 10610U,32GB RAM,512GB SSD,15.6" FHD,vil.MAGYAR numeri.bill,WWAN 4G,Win11
- ASUS TUF Gaming GeForce RTX 4070 Ti 12GB
- Hama Ultraslim Fali konzol (TV)
- ÉRKEZETT Legújabb Bontatlan Új M2 IPAD PRO 2022 12,9 128GB - 256GB Wi-Fi Azonnal DEÁK TÉRNÉL Átvehe
Állásajánlatok
Cég: Ozeki Kft.
Város: Debrecen
Cég: Promenade Publishing House Kft.
Város: Budapest