Gå til innhold

segfault ved malloc();


Anbefalte innlegg

jeg har vel aldri egnetlig brukt pekere skikkelig. og når jeg først begynner, så tryner programmet mitt hardt.

 

rovt sett gjør jeg dette:

  7 #include <stdlib.h>
...
73	 printf("vertices: %i\n",_mesh->num_vertices);
74	 printf("sizeof: %i\n",sizeof(float));
75	 printf("size*vertices: %i\n",sizeof(float)*_mesh->num_vertices);
76	 float *tangentbuffer =  (float*) malloc(_mesh->num_vertices*sizeof(float));
77	 printf("entering second loop");

dette gir igjen

$ make run
g++ -Wall -g -I/home/znora/txt/code/dgl/include/dgl -c bumpmodel.cpp
g++ main.o bumpmodel.o -Wall -g -o Normalmap -lSDL -lSDL_mixer -lGLEW -lSDL_image -lGL -lGLU -ldgl -I/home/znora/txt/code/dgl/include/dgl
mv Normalmap build
make -C ../
make[1]: Entering directory `/home/znora/txt/code/examples/drodling'
src/build/Normalmap
calcing tangents for: Suzanne
vertices: 2904
sizeof: 4
size*vertices: 11616

denne outputen før den fryser og må drepes (kill -9)

vi ser at linje 76 gjør noe galt selv om 74 og 75 printer pene verdier.

er minneområdet rett og slett for stort? gjør jeg noen klassiske nybegynnertabber?

Endret av znora
Lenke til kommentar
Videoannonse
Annonse

Jeg ser ikke noe galt med den koden du har lagt ut eller de dataene som har blitt printet ut. Hvis malloc feiler så skal den returneren NULL.

Bare for å utelukke det meste så kan du jo lagre verdiene du sender til malloc i en int for så lese den og sende den til malloc, men som sagt jeg ser ikke noe galt med koden.

Lenke til kommentar
etter å ha luket mange mindre feil skulle det vise seg at jeg i en av pekerene mine hadde glemt å gange med antall koordinater i et polygon 3. Derfor allokerte jeg bare 1/3 av det minnet jeg trengte.

 

Hint: bruk valgrind for å debugge slike minneproblemer. Den gir deg ofte gode hint om feil i kode du tror fungerer.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...