相关疑难解决方法(0)

gdb:程序已退出,代码为030000000375

我正在教自己使用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)

c stack-overflow gdb mingw segmentation-fault

11
推荐指数
1
解决办法
1129
查看次数

除非初始化,否则未使用内存分配?

这是一个后续我刚才问的问题在这里.

我创建了一个简单的程序来帮助自己理解的内存分配,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)

c

1
推荐指数
1
解决办法
274
查看次数

标签 统计

c ×2

gdb ×1

mingw ×1

segmentation-fault ×1

stack-overflow ×1