当前位置:  开发笔记 > 编程语言 > 正文

具有特定值的realloc的奇怪行为

如何解决《具有特定值的realloc的奇怪行为》经验,为你挑选了1个好方法。

我需要用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;
}

我重新分配一个不同的指针,以避免问题.帮助非常有用.谢谢



1> M.M..:

这是一个问题:

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)条目.

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有