lo que tengo entendido, cuando se le preguntó a reservar un bloque más grande de memoria, la función realloc() hará una de tres cosas diferentes:determinar el comportamiento realloc() antes de llamar a
if free contiguous block exists
grow current block
else if sufficient memory
allocate new memory
copy old memory to new
free old memory
else
return null
creciente del el bloque actual es una operación muy barata, por lo que este es un comportamiento que me gustaría aprovechar. Sin embargo, si estoy reasignando memoria porque quiero (por ejemplo) insertar una char al comienzo de una cadena existente, no quiero que realloc() copie la memoria. Terminaré copiando toda la cadena con realloc(), y luego la copiaré de nuevo manualmente para liberar el primer elemento de la matriz.
¿Es posible determinar qué hará realloc()? Si es así, ¿es posible lograrlo de forma cruzada?
El último de sus 3 casos es incorrecto, realloc devolverá un puntero nulo si no hay memoria suficiente, no el puntero que lo pasó. –
Como dijo Robert Gamble: realloc() devuelve NULL sin memoria. –
Gracias ambos, pseudocódigo corregido. – Ant