HEAP CORRUPTION DETECTED
-
Ich habe ein bestehendes Array und möchte 2 neue Elemente vor den bestehenden setzen.
Ansatz:
test -= 2; test[0] = 1; test[1] = 2;
Fehler:
HEAP CORRUPTION DETECTED:
...
CRT detected that the application wrote to meomory before start of heap buffer.
-
HEAP schrieb:
Ich habe ein bestehendes Array und möchte 2 neue Elemente vor den bestehenden setzen.
Ansatz:
Neues Array mit Grösse+2 mallocieren und den alten Inhalt auf das neue Array an Index 2 memcpyieren.
-
Arrays kann man nach der Definition nicht mehr in der Größe ändern.
-
@paeh
Das funktioniert natürlich, aber nicht sonderlich schön.@DirkB
Realloc?!
-
Ach, da ist ja vom Heap die Rede. Dann ist es auch kein Array.
Mehr Speicher mit
realloc
besorgen und dannmemmove
(da sich die Bereiche überlappen)Oder gleich mehr Speicher besorgen und einen temporären Zeiger auf das 3. Element zeigen lassen und damit arbeiten.
-
Mehr Speicher mit realloc besorgen und dann memmove (da sich die Bereiche überlappen)
Speicher erweitern ist kein Problem, nur memmove bekomme ich nicht hin.
-
tmp = realloc(test ,alteGroesse + 2*sizeoof(*test)); if (tmp) { test = tmp; memmove(test + 2*sizeof(*test), test, alteGroesse); }
ungetestet
-
Das habe ich auch schon getest, dadurch werden aber die ersten beiden Elemente überschrieben.
Beipiel:
Ergibnis:
1 2 5 6Ziel:
1 2 3 4 5 6
-
Ich denke
Index 0 1 2 3 4 5 vorher 3 4 5 6 Ziel 3 4 3 4 5 6
Jetzt kannst du Index 0 und 1 mit deinen neuen Werten beschreiben.
alteGroesse ist in Byte angegeben.
-
Nein.
Vorher:
3 4 5 6
Ziel:
1 2 3 4 5 6
3 und 4 werden aktuell über schrieben.
-
Wo kommen denn bei dir 1 und 2 her?
Zeig mal deinen Code.
-
... am besten mit dem malloc für das zu kurze test.
-
test = (unsigned char *)malloc(4); test[0]= 3; test[1]= 4; test[2]= 5; test[3]= 6; realloc(test, 6); memmove(test + 4, test, (off_t)fw_buf_size); test[0]= 1; test[1]= 2;
Π
-
HEAP schrieb:
memmove(test + 4, test, (off_t)fw_buf_size);
=>
memmove(test + 2, test, 4);
-
In der Annahme das test auch ein char* ist.
Ich weiß jetzt auch nicht, wo da das
fw_buf_size
[c] plötzlich herkommt.
-
In der Annahme das test auch ein
unsigned char*
ist.
-
Den Rückgabewert von
realloc(test, 6);
nicht zu nutzen ist imho recht kühn.