Gå til innhold

segfault ved malloc();


Anbefalte innlegg

Skrevet (endret)

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
Videoannonse
Annonse
Skrevet

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.

Skrevet (endret)

feilen forsvant da jeg flyttet koden til et annet punkt i fila. ingen vet hvorfor.

 

takk for svar.

Endret av znora
Skrevet

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.

Skrevet
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.

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...