problem mit realloc
-
hi!
ich hab ein kleines problem mit meinem code und zwar hab ich einen array *arraylist und dieser soll dynamisch erweitert werden...
#define TPE int TPE *arrlist; int elements; void initArrlist(){ elements = 0; arrlist = NULL; arrlist = (TPE *) malloc(sizeof(TPE)); } void addElement(TPE el){ arrlist[elements] = el; arrlist = (TPE *) realloc(arrlist, sizeof(TPE)); elements++; } ...
dann kann ich 3mal add element aufrufen und beim drittenmal kommt folgende meldung:
*** glibc detected *** realloc(): invalid next size: 0x0804a008 ***
ich nutze linux mit dem gcc compiler 4.0.3!
waer schoen waenn jemand wuesste was ich da falsch mache!
danke mfg... --linuxuser--
-
Du reallokierst immer gleich viel Speicher, genug für ein TPE.
-
Du mußt realloc auch die richtige Größenangabe mit auf den Weg geben - dein Aufruf setzt den Speicher in jeder Runde auf 1*sizeof(int), also rauschst du nahezu sofort in fremde Speicherbereiche.
Richtig müsste das so aussehen:
void addElement(TPE el){ arrlist[elements] = el; elements++; arrlist = (TPE *) realloc(arrlist, sizeof(TPE)*elements); }
-
CStoll schrieb:
Richtig müsste das so aussehen:
... arrlist = (TPE *) realloc(arrlist, sizeof(TPE)*elements); ...
ist immer noch zu wenig
besser so:... arrlist = (TPE *) realloc(arrlist, sizeof(TPE)*(elements+1)); ...
-
hi!
danke ich habs nun mit eurer hilfe hingebracht!
mfg --linuxuser--