Forum » Programiranje » [C] malloc, sigsegv
[C] malloc, sigsegv
čuhalev ::
Torej imam spodnjo kodo, vendar ne vem, čemu mi malloc v nekaterih primerih povozi vrednost v vector->count
typedef struct vector { void ** content; unsigned int size; unsigned int count; } vector; int size = 5; vector *vector = malloc(sizeof(vector)); if (vector != NULL) { vector->count = 0; vector->content = malloc(size * sizeof(void*)); }Uporabljam MinGW-4.8.1 Potem pa se mi povsem nedeterministično ob enakih začetnih podatkih usuje SIGSEGV pri
if (vector) { if (vector->content) free(vector->content); free(vector); }
mn ::
Kakor vidim je tvoj problem, da je spremenljivka "void** content" pointer na pointer. Potem pa ji dodeliš pointer na buffer namesto pointer na pointer ki kaže na buffer. Spremeni deklaracijo "void** content" v "void* content".
Randomness ::
@mn: Ne, saj sem že zgoraj napisal, kaj je problem. Ime spremenljivke in ime tipa je enako in klic malloc ne naredi to, kar jaakaa misli, da naredi. V njegovem primeru namreč sizeof(vector) vrne enako kot sizeof(struct vector *), on pa seveda želi reči sizeof(struct vector). Če bi ime spremenljivke bilo različno od imena tipa, na ta problem seveda ne bi naletel. No, po drugi strani pa se na napakah učimo in bo jaakaa drugič bolj pazljiv. Upam le, da ni pri tem svojem početju nehote sprožil kakšnih jedrskih konic ;-)
Zgodovina sprememb…
- spremenilo: Randomness ()
čuhalev ::
Ja, sem preimenoval in dela, samo mi je zanimivo, da se je včasih program izšel, naslednjič ne.
Randomness ::
Ja, sem preimenoval in dela, samo mi je zanimivo, da se je včasih program izšel, naslednjič ne.Tak in podobni odgovori me vedno zmotijo in nakazujejo na to, da avtor odgovora stvari ne razume dovolj dobro in se mu hkrati ne ljubi potruditi, da bi poskušal svoje razumevanje izboljšati.
Andrej4 ::
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | C in funkcije ter #defineOddelek: Programiranje | 3953 (2314) | misek |
» | [C++] problem z binarnimi datotekamiOddelek: Programiranje | 950 (815) | mallard |
» | [C] kazalčni seznamOddelek: Programiranje | 3101 (2915) | MrBrdo |
» | [c++] Pomoč pri izdelavi std::vector "wrapperja"Oddelek: Programiranje | 1586 (1487) | zhigatsey |
» | kazalci in poljeOddelek: Programiranje | 1679 (1600) | rasta |