Mi okoz segfaultot?
Van egy kodreszlet, amivel baja van:
typedef struct bakancs {
char nev [20]; //bakancs neve//
char keszult [30]; //hol készült//
int legkisebb;
int legnagyobb; //ezek a lábméretek//
char szin[15]; //bakancs színe//
double elettartam; //meddig bírja a bakancs//
char gyarto[20]; //ki gyártja//
int ar; //mennyibe kerül//
int bevetel; //a legnagyobb bevétel//
int elegedettseg; //egy 1-5-ig skálán a vásárlók értékelése//
struct bakancs* next;
} bakancs;
typedef struct gyarto{
char nev[20];
struct gyarto* next;
bakancs* head;
} gyarto;
int fgv(gyarto* headfo, int npt){
gyarto* a=headfo;
bakancs* b;
int max=0;
while(a!=NULL){
for(b=a->head; b!=NULL; b=b->next)
A for ciklussal van a baja. A lényeg, hogy egy fésűs lista elemeit járom be. Van az egész listának is egy feje, ez a headfo. A fésűs lista gerincén van egy pointer(gyártó), és ennek a bakancsait járom be. Aztán ha a for ciklusnak vége, akkor persze a=a->next.
Mi a gondja a for-ral?
Jó az a for ciklus, nincs vele gond.
Segfault akkor van, ha olyan helyre írsz a memóriában, amihez nincs közöd, tehát amit nem foglaltál le. Vagy nem foglaltál le helyet a heap-ben, vagy túlindexelsz egy tömböt, stb.
Így ránézésre azt látom, hogy vannak mutatóid, de sehol egy malloc() vagy valami, amivel memóriát foglalnál le. Mélyebb kódelemzésbe én nem akarok belemenni, de szinte biztos vagyok benne, hogy valamelyik gyarto vagy bakancs mutato nem lefoglalt helyre mutat.
"mert bazi hosszú a teljes kód"
az már kódszervezési probléma...
Ez házi lesz? Ha nem akarod megosztani a kódot publikusan, akkor küldj privátot.
További 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!