哪个内存被溢出
Which Memory is Overflown?
#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帮助我澄清了这个答案。
相关文章:
- 将字符串存储在c++中的稳定内存中
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- gsl_complex导致内存溢出
- 哪个内存被溢出
- 缓冲区溢出到其他 exe 的内存中?还是从远程桌面程序到 csrss.exe?
- 读取虚拟内存时C++缓冲区溢出
- 内存块类在溢出后给出一个数字,为什么以及如何
- 内存将被代码中的溢出覆盖
- 如何为大型项目制作一个简单的工具来检测Linux中的双倍空闲或内存溢出
- 内存溢出?
- 内存集内存溢出
- 内存溢出的Dtrace
- SSE-C++内存溢出
- 内存溢出?std:: badalloc
- 如何避免c++中由于内存溢出而导致的错误消息
- 获得由内存泄漏引起的内存溢出,应用程序继续运行和分配
- 在试图确定是在堆栈还是堆上分配内存时,没有发生堆栈溢出
- 溢出或内存错误c++