J'ai besoin de réaffecter un tableau int de dimension initiale 5 avec N valeurs et les remplir avec la somme des valeurs précédentes. Tout fonctionne bien si N = 6 < mais si je mets N == 7, plantage du programme avec cette erreur:Comportement étrange de realloc avec certaines valeurs
a.out: malloc.c:2403: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed.
Je ne rien de spécial ou étrange, et je ne sais pas pourquoi j'ai ce comportement. Voici mon code:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int * change(int * arr, int n)
{
int * a, i, somma = 0;
a = realloc(arr, n * sizeof(int));
for(i = 0; i < 5; i++)
somma += arr[i];
for(int j = i; j < (5+n); j++) {
a[j] = somma;
somma += a[j];
}
return a;
}
int main()
{
int N, i, *arr, *arr1;
arr = malloc(5 * sizeof(int));
printf("give me 5 numbers\n");
for(i = 0; i < 5; i++)
scanf("%d", &arr[i]);
printf("give me N number to use in realloc\n");
scanf("%d", &N);
arr1 = change(arr, N);
for(i = 0; i < (5+N); i++) {
printf("%d\n", arr1[i]);
}
return 0;
}
Je Realloc dans un autre pointeur pour éviter problème. L'aide est extrêmement utile. Merci
Compilez avec toutes les informations d'avertissement et de débogage (par exemple 'gcc -Wall -g' si vous utilisez [GCC] (http://gcc.gnu.org/) ...). Améliorez votre code pour ne recevoir aucun avertissement. Ensuite, utilisez le débogueur (par exemple 'gdb' ....) et [valgrind] (http://valgrind.org/). –
J'utilise 'clang -O0 -Wall -g' et la compilation fonctionne bien. J'ai également utilisé le débogueur pour comprendre le comportement – Kyrol
Note: les fonctions 'malloc & co.' peuvent échouer: vérifier les valeurs retournées ** toujours ** – LPs