【问题标题】:Simple C program crashes on windows简单的 C 程序在 Windows 上崩溃
【发布时间】:2016-07-13 17:11:09
【问题描述】:

我编写了一个简单的 c 程序来模拟内存泄漏。但是当我尝试运行它时它崩溃了。

#include <stdio.h>
#include <stdlib.h>

void memory_leak(void);

int main()
{
    memory_leak();
    return EXIT_SUCCESS;
}

void memory_leak()
{
    int i = 100;
    memory_leak();
}

我使用 MinGW gcc 编译器。

【问题讨论】:

  • 你期待它做什么?
  • 无限循环倾向于这样做
  • 我会将memory_leak() 重命名为stackoverflow() :)
  • 为什么你认为这是内存泄漏? “YHBT HAND”关闭选项在哪里?
  • 如果没有发生崩溃那就奇怪了!

标签: c windows gcc recursion memory-leaks


【解决方案1】:

您正在产生堆栈溢出 - 通过递归调用您的函数memory leak

您的memory_leak 版本分配了一个本地(“堆栈”)变量,该变量将在函数退出时被释放/销毁/释放。

要真正造成内存泄漏,您需要从堆中分配内存(例如,使用newmalloc)。

void* memory_leak()
{
    return malloc(10);
}

[不要在memory_leak内无条件调用memory_leak。]

【讨论】:

  • 谢谢,这是我真正想要的。
  • 但它在 2,035.1 MB 上停止。是程序的系统限制还是什么?因为我还有 4.3 GB 可用内存。
  • 你在测试什么操作系统?
  • 我使用的是 Windows 10 64 位
  • 您的应用程序是 32 位应用程序吗?如果是,则进程最大为 2GB(如果不使用 AWE/4GT 等“扩展”)。 (系统使用上2GB)。如果是 64 位,请检查编译器开关 /LARGEADDRESSAWARE。它还可以依赖于与 CRT 的静态或动态链接。
猜你喜欢
  • 1970-01-01
  • 2017-11-21
  • 1970-01-01
  • 2012-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多