#include<cstdlib>
long int val=10000;
int main()
{
for(;;val++)
{
malloc(val);
}
return 0;
}
以上代码会生成错误细分错误 在这种情况下,哪个内存溢出,为什么?
答案 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帮助我澄清了这个答案。