哪个内存溢出?

时间:2017-06-28 00:41:30

标签: c++

#include<cstdlib>
long int val=10000;
int main()
{
for(;;val++)
{
malloc(val);
}
return 0;
}

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

1 个答案:

答案 0 :(得分:1)

这个循环:

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

永不退出。它将继续无限期地分配增加大小的缓冲区......直到val回绕并变为负数,然后它进入未定义的行为区域,这可能会触发段错误。

分配有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帮助我澄清了这个答案。