我需要用N值重新分配初始维度为5的int数组,并用之前值的总和填充它们.如果N <= 6,一切都很好但如果我把N == 7,程序崩溃时会出现这个错误:
a.out:malloc.c:2403:sysmalloc:断言`(old_top == initial_top(av)&& old_size == 0)|| ((unsigned long)(old_size)> = MINSIZE && prev_inuse(old_top)&&((unsigned long)old_end&(pagesize - 1))== 0)'失败.
我没有做任何特别或奇怪的事情,我也不知道为什么会有这种行为.这是我的代码:
#include#include #include 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; }
我重新分配一个不同的指针,以避免问题.帮助非常有用.谢谢
这是一个问题:
a = realloc(arr, n * sizeof(int)); for(i = 0; i < 5; i++) somma += arr[i];
该realloc
函数使传递的参数无效arr
.它会导致arr
之后使用未定义的行为,就像您通过编写一样arr[i]
.
要解决此问题,您可以将总和移到realloc
行之前.
另一个问题是下一个循环写出越界:
for(int j = i; j < (5+n); j++) { a[j] = somma;
您只为n
条目分配空间,然后循环到5+n
.(并在main
你循环中5+N
).也许你应该重新分配(5+n)
条目.