了解C程序中的内存泄漏

时间:2016-10-31 21:07:49

标签: c memory-leaks

我正在尝试扫描所需大小后扫描用户的整数。 我代表了代码的一部分,我使用valgrind(返回valgrind中的错误是:“无效写入大小4”)导致内存泄漏。内存泄漏是由main下面的函数引起的。 当用户输入大小并且之后输入的数据超过声明数量时会出现问题,例如SIZE = 8和DATA = 1 2 3 4 5 6 7 8 9 10,我认为我的代码只是忽略了额外的数据(这是我的意图)但是当我尝试调试它时它一切运行良好但是当它到达第一个自由命令时崩溃。

我真的不明白为什么会这样,你能帮帮我吗?

int main()
{
  int size = 0;
  int* user_numbers_array = (int*) malloc(size * sizeof(int));
  int* second_array = (int*) malloc(size * sizeof(int));

  printf("Enter size of input:\n");
  scanf("%d", &size);

  ScanNumbersFromUser(size, user_numbers_array)

  free(user_numbers_array);
  free(second_array);

  return 0;
}

int ScanNumbersFromUser(int size, int* user_numbers_array)
{
    int user_number = 0;
    printf("Enter numbers:\n");
    for(int i = 0; i < size; i++){
       if(scanf("%d",&user_number) =! 1){ \\testing for valid input
          printf("error");
          return 0;    
         }
       *(user_numbers_array + i) = user_number;
    }
return 1;
}

1 个答案:

答案 0 :(得分:4)

你已经malloc编辑了之前的数组你已经获得了用户的大小!您的数组大小为0。