我正在教自己使用gdb并运行一些随机测试.值得一提的是,我在Windows 7 x64上使用MinGW的便携式安装.我已经创建了一个程序,我知道它会导致堆栈溢出,当我在gdb中运行它时,我首先得到两个SIGSEGV信号(毫不奇怪),然后它退出(再次不出意外)代码030000000375.
Program received signal SIGSEGV, Segmentation fault.
Program received signal SIGSEGV, Segmentation fault.
Program exited with code 030000000375.
Run Code Online (Sandbox Code Playgroud)
好奇心让我最好......那个代码到底是什么?我用Google搜索并发现很少.
谢谢!
更新:作为参考我在Ubuntu上尝试了相同的程序,结果略有不同:
Program received signal SIGSEGV, Segmentation fault.
Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists.
Run Code Online (Sandbox Code Playgroud) 这是一个后续我刚才问的问题在这里.
我创建了一个简单的程序来帮助自己理解的内存分配,malloc()和free().注意注释掉的free行.我创建了一个故意的内存泄漏,所以我可以看到Windows报告"Mem Usage"膨胀到1GB.但后来我发现了一些奇怪的东西.如果我在自由行的正上方注释掉循环,那么我没有用随机整数初始化我的存储块,看起来该空间实际上并没有被程序从操作系统"声明".为什么是这样?
当然,我还没有对它进行初始化,但我声称它,所以操作系统不应该看到该程序使用1GB,无论该GB是否已初始化?
#include <stdio.h>
#include <stdlib.h>
void alloc_one_meg() {
int *pmeg = (int *) malloc(250000*sizeof(int));
int *p = pmeg;
int i;
// for (i=0; i<250000; i++) /* removing this loop causes memory to not be used? */
// *p++ = rand();
// free((void *)pmeg); /* removing this line causes memory leak! */
}
main()
{
int i;
for (i=0; i<1000; i++) {
alloc_one_meg();
}
}
Run Code Online (Sandbox Code Playgroud)