哪个内存被溢出

Which Memory is Overflown?

本文关键字:溢出 内存      更新时间:2023-10-16
#include<cstdlib>
long int val=10000;
int main()
{
for(;;val++)
{
malloc(val);
}
return 0;
}

以上代码将生成错误分割错误在这种情况下,哪个内存溢出,为什么?

此循环:

for(;;val++)
{
  malloc(val);
}

永远不会退出。它将保持无限大小的缓冲区的分配……直到val缠绕并变成负面,然后它进入不确定的行为领域,这可能会触发segfault。

malloc()分配的缓冲区需要在某个时候用free()释放。因此,您需要存储malloc()返回的值,以便以后可以将缓冲区传递给free()。由于这是标记C ,因此您应该考虑这样的东西:

#include <vector>
long int val=10000;
int main()
{
  std::vector<std::vector<int>> v;
  for (int i = 0; i < 100; ++i)
  {
    v.emplace_back(std::vector<int>(10000));
  }
  // hopefully your app does need 4 MB of integer data, it can use them from here on...
  return 0;
}

感谢@igortandetnik和 @pm100帮助我澄清了这个答案。