004
10.09.2006, 21:40 Uhr
Pablo
Supertux (Operator)
|
nichts, ich meinte nur dass das undefinierte Verhalten sich nach unterschiedlichen Versionen ändern kann, ist auch nicht so wichtig jetzt.
Angenommen, ich hab:
C++: |
char *tmp1, *tmp2;
tmp1 = malloc(len);
|
Im Laufe des Programmes mache ich ein
C++: |
tmp2 = realloc(tmp1, len - 5);
if(!tmp2) /* fehler ausgeben, sofort beenden */
tmp1 = tmp2;
memmove(tmp1 + 3 , tmp1 + len - 4, 3);
|
was passiert jetzt? tmp1 + len - 4 landet nämlich auf dem Bereich, der durch realloc freigegeben wurde. Was passiert eigentlich mit diesem freigegebenen Bereich? Wird er auf 0 gesetzt oder so? Kann es sein, dass unter Umständen Müll kopiert wird? Sollte ich da nicht lieber zuerst kopieren und erst dann realloc aufrufen? (im Falle, dass realloc weniger Speicher reserviert wie oben) -- A! Elbereth Gilthoniel! silivren penna míriel o menel aglar elenath, Gilthoniel, A! Elbereth! Dieser Post wurde am 10.09.2006 um 21:41 Uhr von Pablo editiert. |