为什么"char ptr [n]; free(ptr);"​​会导致程序失败?

Al2*_*2O3 -2 c c++ memory heap stack

使用c:

  char ptr[n];
  free(ptr);
Run Code Online (Sandbox Code Playgroud)

在我看来:当"char ptr [n];" 使用,分配内存,ptr指向它,free(ptr)应该工作.程序失败了,为什么?(n == 5例如)任何深入分析?

Alo*_*ave 6

因为你调用free了一个未分配的变量malloc.
这会导致未定义的行为.幸运的是它崩溃了,你可以检测到它,否则它可能会在最尴尬的时候崩溃.

你需要free释放堆分配变量的内存,你拥有的是本地存储上的一个数组(假设它在一个函数中),它在创建它的范围({,})结束时自动解除分配.

  • @JohnSon这里没有什么特别有趣的"在集会层面"(不管是什么意思).标准指定它是这样,因为它是合乎逻辑的,并且当OS执行意外的操作时,操作系统会终止您的程序.就这样. (2认同)