Segmentation fault megoldása mi lehet? C-nyelv.
A fordító a következőkre ír ki segmentation fault-ot
Van a mainben egy fájlmegnyitás, és addig olvasson a program, amíg tart a fájl:
while(fscanf(f, "%s", string))!=EOF
{if(fgets(string, 100, f)!=NULL
Itt az akar lenni, hogy ugye addig olvasson a fájl ameddig tart, és amíg nem jön a fájlban üres sor, addig egy függvény kapja meg a sorra bejövő sztringeket
És ekkor stringet kapja meg egy függvény:
fuggveny(char* string)
Ekkor a függvényben(amíg nem jön kettőspont)
for(int i=0; strchr(string, ':')!=NULL; i++)
{j++;
if s[i]==' '
j=0;}
Vagyis amíg nincs kettőspont, addig j számoljon 0tól (nyilván van beállítva kezdeti érték), és ha szóköz jön, 0zza ki.
És itt a hiba
"Segmentation fault megoldása mi lehet?"
Ne piszkálj olyan memóriaterületet ami nem a tiéd.
indítsd el gdb-vel(vagy akármilyen más debuggerrel) és látni fogod, hogy mi okozta a segfaultot.
Ami biztos, hogy olyan memóriaterületet piszkálsz, ami nem a tied(ahogy #3 írta).
Ez több módon is megtörténhet:
- Kihagytál valami hibakezelést, az egyik pointered NULL lett és azt használva akarsz memóriát elérni
- Elrontottál valami pointer aritmetikát és lett egy olyan pointered, ami olyan memóriára mutat, ami nem a tied.
- Túlírsz valami buffert(ez tkp az elözö pont speciális esete)
biztos van más módja is, hogy segfaultot kapj, de én ezekkel kezdeném a nyomozást.
Dokumentációt kéretik olvasni, különös tekintettel a return value-ra. Kb az egész ciklusod f.szság jelenleg, az egyenlőség vagy true vagy false, ami számmal kifejezve 1 vagy 0. Szóval max az első indexig megy a ciklus.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!