了解 C 程序中的内存泄漏

use*_*565 0 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;
}
Run Code Online (Sandbox Code Playgroud)

chr*_*ock 5

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