J'essaye de réallouer de la mémoire en utilisant realloc dans le programme ci-dessous et en vérifiant après la mémoire initiale de realloc que j'ai réagi en utilisant malloc (i = (int *) malloc (5 * sizeof (int))) programme je suis capable d'accéder aux données après realoc j'ai vérifié en utilisant un autre pointeur (ie * m). est ce comportement approprié? ou la mémoire devrait être libre une fois Realloc appelé?est-ce que re-libérer la mémoire existante?
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *i,*jn, *m;
i = (int*)malloc(5 * sizeof(int));
int j,k=10;
for(j=0 ;j<5; j++)
{
i[j] = j;
printf("%d \n",i[j]);
}
for(j=0 ;j<5; j++)
{
printf("%p\n",i++);
}
jn = (int *)calloc(5, sizeof(*i));
for(j=0 ;j<5; j++)
{
printf("%p\n",jn++);
}
i = i-5;
m = i;
printf("m = %p %d\n",(m+1), *(m+1));
i =(int *)realloc(i,8*sizeof(int));
for(j=0 ;j<8; j++)
{
printf("%d\n",i[j]);
}
for(j=0 ;j<8; j++)
{
printf("%p\n",i++);
}
printf("m = %p %d\n",(m+1), *(m+1));
return 0;
}
Je considérerais cela comme une question de propriété plutôt que comme une action spécifique. Si 'realloc' réussit, il prendra la propriété de la mémoire entrante (soit en la manipulant, soit en la 'libérant') et retournera un pointeur qui peut être utilisé (" possédé ") par la fonction appelante. Si 'realloc' échoue (retourne' NULL'), votre fonction conserve la propriété de la mémoire d'origine et devrait la 'libérer' quand elle est terminée. – Myst