Kezdőlap › Fórumok › Programozás › Szegmens hiba – de miért?
- This topic has 76 hozzászólás, 6 résztvevő, and was last updated 17 years, 1 months telt el by
pointux.
-
SzerzőBejegyzés
-
2008-06-17-15:02 #2164528
uzsolt: arra azért vigyázz, hogy az strdup (nem egy ref. pointert ad), ugyanúgy fel kell szabadítani az általa lefoglalt memória területet free-vel, mintha malloc-kal foglaltad volna le.
2008-06-17-15:02 #2164529uzsolt: arra azért vigyázz, hogy az strdup (nem egy ref. pointert ad), ugyanúgy fel kell szabadítani az általa lefoglalt memória területet free-vel, mintha malloc-kal foglaltad volna le.
2008-06-17-15:05 #2164530gabaman wrote:uzsolt wrote:Valamint ha /home/zsolt/data paraméterrel hívom az nc_readdir-t, akkor jó. Ha /home/zsolt/data/-val, akkor szegmens hiba.
Talán jobban megérted mi a különbség a két név, ha utánanézel mi mivel kompatibilis. A /home/zsolt/data ugynaz mint a /home/zsolt/data/. (per pont), és a /home/zsolt/data/ ugynaz mint a /home/zsolt/data/* (per csillag). Nézd meg a path paraméter utolsó karakterét, ha ‘/’ akkor tegyél oda egy sor végét (0).
OK, majd végiggondolom, de most nem ez a legfontosabb (számomra).gabaman wrote:Ez a gond. Ha nincs elem, akkor a nof értéke -1, a (*files)[nof].name miatt lesz szegmens hiba, mert a nulladik elem előtti helyre ír. A nof értékét növeld a ciklus végén:
Nem-nem, amit // end of ‘while’-nak gondoltál, az „csak” az if-hez tartozik (márminthogy kell-e bővíteni a foglalt memóriát), és a (*files)[nof] a while-on belül van. Tehát ha -1-ről kezdünk, akkor mire odaér, addigra már egyszer növeltük.De azért átírtam, hogy nulláról kezdjünk, és a ciklus végén növeljünk, a hiba ugyanaz. A 30. elemnél szegmensezik.
vizsla wrote:uzsolt: arra azért vigyázz, hogy az strdup (nem egy ref. pointert ad), ugyanúgy fel kell szabadítani az általa lefoglalt memória területet free-vel, mintha malloc-kal foglaltad volna le.Tudok róla, az awesome-status programom írása közben rájöttem (tele is van olyan megjegyzésekkel, hogy ‘// malloc’, az strdup-os sorok végén, hogy ne felejtsek el felszabadítani).
Amúgy ha az strdup-os sort kitörlöd/kommenteled, akkor is gikszer van.2008-06-17-15:05 #2164531gabaman wrote:uzsolt wrote:Valamint ha /home/zsolt/data paraméterrel hívom az nc_readdir-t, akkor jó. Ha /home/zsolt/data/-val, akkor szegmens hiba.
Talán jobban megérted mi a különbség a két név, ha utánanézel mi mivel kompatibilis. A /home/zsolt/data ugynaz mint a /home/zsolt/data/. (per pont), és a /home/zsolt/data/ ugynaz mint a /home/zsolt/data/* (per csillag). Nézd meg a path paraméter utolsó karakterét, ha ‘/’ akkor tegyél oda egy sor végét (0).
OK, majd végiggondolom, de most nem ez a legfontosabb (számomra).gabaman wrote:Ez a gond. Ha nincs elem, akkor a nof értéke -1, a (*files)[nof].name miatt lesz szegmens hiba, mert a nulladik elem előtti helyre ír. A nof értékét növeld a ciklus végén:
Nem-nem, amit // end of ‘while’-nak gondoltál, az „csak” az if-hez tartozik (márminthogy kell-e bővíteni a foglalt memóriát), és a (*files)[nof] a while-on belül van. Tehát ha -1-ről kezdünk, akkor mire odaér, addigra már egyszer növeltük.De azért átírtam, hogy nulláról kezdjünk, és a ciklus végén növeljünk, a hiba ugyanaz. A 30. elemnél szegmensezik.
vizsla wrote:uzsolt: arra azért vigyázz, hogy az strdup (nem egy ref. pointert ad), ugyanúgy fel kell szabadítani az általa lefoglalt memória területet free-vel, mintha malloc-kal foglaltad volna le.Tudok róla, az awesome-status programom írása közben rájöttem (tele is van olyan megjegyzésekkel, hogy ‘// malloc’, az strdup-os sorok végén, hogy ne felejtsek el felszabadítani).
Amúgy ha az strdup-os sort kitörlöd/kommenteled, akkor is gikszer van.2008-06-17-15:08 #2164532Itt egy másik hiba:
Code:if ( max == (nof) ) {Mi a nof? A fájlok száma? Akkor méret típusú. De indexként is használod, aminek az értéke mindig egyel kevesebb, mint a méret. Könnyebb lenne egy idx változót bevezetned, mert így magadat kevered meg.
Code:if ( max == (nof + 1) ) {2008-06-17-15:08 #2164533Itt egy másik hiba:
Code:if ( max == (nof) ) {Mi a nof? A fájlok száma? Akkor méret típusú. De indexként is használod, aminek az értéke mindig egyel kevesebb, mint a méret. Könnyebb lenne egy idx változót bevezetned, mert így magadat kevered meg.
Code:if ( max == (nof + 1) ) {2008-06-17-15:10 #2164534uzsolt wrote:Nem-nem, amit // end of ‘while’-nak gondoltál, az „csak” az if-hez tartozik (márminthogy kell-e bővíteni a foglalt memóriát), és a (*files)[nof] a while-on belül van. Tehát ha -1-ről kezdünk, akkor mire odaér, addigra már egyszer növeltük.De azért átírtam, hogy nulláról kezdjünk, és a ciklus végén növeljünk, a hiba ugyanaz. A 30. elemnél szegmensezik.
Igaz, sorry. Elnéztem. Viszont tényleg a nof okozza a hibát, mert nem jól használod (lásd méret vs index).
2008-06-17-15:10 #2164535uzsolt wrote:Nem-nem, amit // end of ‘while’-nak gondoltál, az „csak” az if-hez tartozik (márminthogy kell-e bővíteni a foglalt memóriát), és a (*files)[nof] a while-on belül van. Tehát ha -1-ről kezdünk, akkor mire odaér, addigra már egyszer növeltük.De azért átírtam, hogy nulláról kezdjünk, és a ciklus végén növeljünk, a hiba ugyanaz. A 30. elemnél szegmensezik.
Igaz, sorry. Elnéztem. Viszont tényleg a nof okozza a hibát, mert nem jól használod (lásd méret vs index).
2008-06-17-15:13 #2164536zoltan22 wrote:Az nc_strcat-ot megoldottam egyCode:#define nc_strcat strcat-al.
Lényegében az, csak arra kell, hogy a könyvtárat meg a fájlnevet összefűzze a stat miatt.zoltan22 wrote:Futtattasi eredmenyek nalam:
…
Ez a hiba igy meg sokszor ismetlodik.Hú, ennek nagyon örülök. Csak egy baj van: nem tudok vele mit kezdeni (azaz: nem értem, a forrásban mifélét keressek, ami ezt okozza) 🙁
Egyébként nálam is hasonló.2008-06-17-15:13 #2164537zoltan22 wrote:Az nc_strcat-ot megoldottam egyCode:#define nc_strcat strcat-al.
Lényegében az, csak arra kell, hogy a könyvtárat meg a fájlnevet összefűzze a stat miatt.zoltan22 wrote:Futtattasi eredmenyek nalam:
…
Ez a hiba igy meg sokszor ismetlodik.Hú, ennek nagyon örülök. Csak egy baj van: nem tudok vele mit kezdeni (azaz: nem értem, a forrásban mifélét keressek, ami ezt okozza) 🙁
Egyébként nálam is hasonló. -
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.
legutóbbi hsz