超过1GB的内存分配错误

时间:2016-06-28 07:17:50

标签: c++ visual-studio qt dynamic-memory-allocation

我正在尝试开发一个应用程序,它从RAM中分配给定数量的GB。当我尝试分配1 GB RAM时,它工作正常,但超过1GB,它会崩溃。

我使用的是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时,它也会崩溃。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:5)

你的记忆是碎片化的。你要的是一个1GB的大块,但没有这样的块可用。可能有十个512MB的块可用,但这还不够好。

答案 1 :(得分:1)

你的问题是你在乘法中使用类型int,这是一个32位整数,导致整数溢出(1024 * 1024 * 1024 * 2产生一个负结果,32-位size_t)。

您应该使用RowFilter代替(无论您的应用是否适用,您的操作系统都是64位)。