Ho problemi a capire come funziona realloc. Se io malloc'ed un buffer e copiato i dati a tale buffer, diciamo "AB":Perdiamo dati in un buffer dopo la riallocazione?
+------------+
| A | B | \0 |
+------------+
poi ho realloc'ed buffer, ci sarà persa nei dati (anche un solo byte)? ; o semplicemente amplia il buffer? :
+------------------------+
| A | B | \0 | ? | ? | ? |
+------------------------+
codice:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void){
char* buffer = (char*) malloc(sizeof(char) * 3);
strncpy(buffer, "AB", 2);
buffer = (char*) realloc(buffer, sizeof(char) * 6); /* Will there be any lost here? */
free(buffer);
return(0);
}
Perché può non vi 'tampone = realloc (tampone, newSize);'? –
@ylun per i motivi spiegati nella risposta –
Proprio così, al fine di prevenire la perdita di dati, si dovrebbe prima verificare che l'allocazione abbia esito positivo e quindi riassegnare, grazie. –