J'ai essayé de créer un programme d'exemple utilisant calloc et realloc et je suis tombé sur un problème où, lorsque je réduis un tableau d'entiers, il semble supprimer le premier élément au lieu du dernier.
int *m = (int*)calloc(2, sizeof(int));
*m = 1;
*(m+1) = 2;
printf("\tInt 1: %d\n", m[0]);
printf("\tInt 2: %d\n\n", *(m+1));
// REALLOC
printf("How many elements the array have? ");
scanf("%d", &num);
*m = (int *)realloc(m, num * sizeof(int));
printf("ARRAY NOW HAS %d PLACES\n\n\t", num);
for(i = 0; i < num; i++) {
m[i] = i + 1;
printf("%d ", m[i]);
}
// DELETING MEMBERS OF AN ARRAY
while((d < 0) || (d > num)) {
printf("\n\nChoose which position of the previous array should be deleted (0 = first): ");
scanf("%d", &d);
}
printf("\nUPDATED ARRAY:\n\n");
for(i = d; i < num - 1; i++) {
m[i] = m[i + 1];
}
*m = (int *)realloc(m, (num - 1)*sizeof(int));
num--;
for(i = 0; i < num; i++) {
printf("%d ", m[i]);
}
Un exemple de la sortie du programme serait :
Int 1: 1
Int 2: 2
How many elements the array have? 17
ARRAY NOW HAS 17 PLACES
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Choose which position of the previous array should be deleted (0 = first): 6
UPDATED ARRAY:
10620272 2 3 4 5 6 8 9 10 11 12 13 14 15 16 17
Et si j'inclus le dernier membre du tableau qui aurait dû être supprimé (dans ce cas, m[16]), il apparaît :
10620272 2 3 4 5 6 8 9 10 11 12 13 14 15 16 17 17
Bien sûr, je ne suis pas tout à fait sûr de ce qui se passe mais il semble que cela supprime simplement la valeur de m[0] ?
Merci d'avance pour toute aide !