【发布时间】:2016-06-28 07:17:49
【问题描述】:
我正在尝试开发一个从 RAM 分配给定数量 GB 的应用程序。当我尝试分配 1 GB RAM 时,它工作正常,但超过 1 GB 时,它会崩溃。
我使用的是 Windows 7 - 64 位,并且我有 6 GB RAM(已安装内存)。我使用 Qt 开发此应用程序,我使用的是 Visual Studio 2013。
代码在这里:
int size = 1024 * 1024 * 1024;
m_Size = ui.CPUAllocationEntry->text().toInt();
m_Arr =(char*) malloc(sizeof(char)*size*m_Size);
memset(m_Arr, 1, size*m_Size);
if (m_Arr == NULL)
{
qDebug() << "Pointer Null" << endl;
}
else
qDebug() << "Pointer NOT null" << endl;
return;
错误是:
ttool.exe 中 0x0F993FD4 (msvcr120d.dll) 处的第一次机会异常:0xC0000005:访问冲突写入位置 0x00000000。
ttool.exe 中 0x0F993FD4 (msvcr120d.dll) 处的未处理异常:0xC0000005:访问冲突写入位置 0x00000000。
我尝试将其作为 32 位应用程序和 64 位应用程序,结果是一样的。我还尝试了链接器的 /LARGEADRESSAWARE 选项。但是我找不到解决方案。
我知道这可能与我使用了多少 RAM 有关,但是当我使用 3.02GB RAM 并尝试分配 2GB 时,它也会崩溃。
我该如何解决这个问题?
【问题讨论】:
-
memset应该在一个条件下。至少它不会崩溃并打印Pointer Null。 -
可能没有那么多连续内存可用。
-
这也可能是 Windows 的问题,一旦我编写了一个内存泄漏非常严重的应用程序,当它超过 1GB 的内存时,它就崩溃了,大概是被 Windows 关闭了。这是在 Windows 7 -64 位上,机器中有 4GB 可用。
-
您真的尝试编译为 64 位吗?显然它不能在 32 位中工作,因为最大是 2GB 的未分段内存。
-
@ElderBug 是的,我尝试编译为 64 位。现在它分配,但分配后,它停止响应。
标签: c++ visual-studio qt dynamic-memory-allocation