繁体   English   中英

超过1GB的内存分配错误

[英]More than 1GB memory allocation error

我正在尝试开发一个从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时,它也会崩溃。

我怎么解决这个问题?

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

您的问题是您正在使用int类型,它是一个32位整数,用于导致整数溢出的乘法(1024 * 1024 * 1024 * 2使用32位int产生负数)。

您应该改用size_t (无论您的应用是否为OS,都应该是64位)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM