2 Stimmen

Probleme mit der dynamischen Speicherzuweisung: main: malloc.c:3096: sYSMALLOc

Ich schreibe eine einfache Funktion, um eine Liste zu erstellen, die ein Kartenspiel darstellt. Hier ist die Definition der Structs

typedef struct {
 float valoreEff;
 char *seme;
 char *valore;
 } carta;

struct Mazzo {
 carta info;
 struct Mazzo *nextPtr;
 };

typedef struct Mazzo mazzo;
typedef mazzo *mazzoPtr;

Hier ist die Funktion, die einen Zeiger auf das erste Element der Liste zurückgibt

mazzoPtr caricaMazzo(void){

 mazzoPtr sMazzoPtr=NULL;
 int val,seme;
 carta buffer;
 mazzoPtr newPtr;
  char *tabValori[10]={"Asso","Due","Tre","Quattro","Cinque","Sei","Sette","Donna","Cavallo","Re"};
  char *tabSeme[4]={"Denari","Spade","Coppe","Bastoni"};

 for(seme=0;seme<4;seme++){
  for(val=0;val<10;val++){
   buffer.seme=tabSeme[seme];
   buffer.valore=tabValori[val];
   if (val<=7) {
    buffer.valoreEff=val+1;
   }
   else {
    buffer.valoreEff=0.5;
   }
   printf("ok\n");
   newPtr=malloc(sizeof(carta));
   if (newPtr==NULL){
    printf("Memoria insufficiente\n");
    return NULL;
   }
   newPtr->info=buffer;
   newPtr->nextPtr=sMazzoPtr;
   sMazzoPtr=newPtr;
  }
 }
 return sMazzoPtr;
}

GCC gibt mir keine Kompilierzeitfehler, aber wenn ich das Programm ausführe, ist dies die Ausgabe

ok
ok
main: malloc.c:3096: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *)
&((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd))))
&& old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)
((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 *
(sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size
& 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed.
Aborted

Ich habe es auch mit Valgrind versucht, aber ich kann den Fehler im Code nicht herausfinden.

==21848== Invalid write of size 4
==21848==    at 0x8048554: caricaMazzo (in /home/gianluca/Dropbox/PROGRAMMI/progetto/main)
==21848==    by 0x8048431: main (in /home/gianluca/Dropbox/PROGRAMMI/progetto/main)
==21848==  Address 0x419e034 is 0 bytes after a block of size 12 alloc'd
==21848==    at 0x4025BD3: malloc (vg_replace_malloc.c:236)
==21848==    by 0x804851D: caricaMazzo (in /home/gianluca/Dropbox/PROGRAMMI/progetto/main)
==21848==    by 0x8048431: main (in /home/gianluca/Dropbox/PROGRAMMI/progetto/main)
==21848== 

Ich hoffe, Sie können mir helfen :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X