超过 1GB 的内存分配错误
More than 1GB memory allocation error
我正在尝试开发一个从 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;
错误是:
First-chance exception at 0x0F993FD4 (msvcr120d.dll) in ttool.exe: 0xC0000005: Access violation writing location 0x00000000.
Unhandled exception at 0x0F993FD4 (msvcr120d.dll) in ttool.exe: 0xC0000005: Access violation writing location 0x00000000.
我将其作为 32 位应用程序和 64 位应用程序进行了尝试,结果是一样的。我还为链接器尝试了 /LARGEADRESSAWARE 选项。但是我找不到解决方案。
我知道这可能与我使用了多少 RAM 有关,但是当我使用 3.02GB RAM 并尝试分配 2GB 时,它也崩溃了。
我该如何解决这个问题?
你的记忆是碎片化的。您要求一大块 1GB,但没有这样的块可用。可能有十个 512MB 的块可用,但这还不够好。
您的问题是您在导致整数溢出的乘法中使用类型 int
,它是一个 32 位整数(1024 * 1024 * 1024 * 2 产生负结果, 32 位 int
).
您应该改用 size_t
(假设您的 OS 是 64 位的,无论您的应用是否是)。
我正在尝试开发一个从 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;
错误是:
First-chance exception at 0x0F993FD4 (msvcr120d.dll) in ttool.exe: 0xC0000005: Access violation writing location 0x00000000.
Unhandled exception at 0x0F993FD4 (msvcr120d.dll) in ttool.exe: 0xC0000005: Access violation writing location 0x00000000.
我将其作为 32 位应用程序和 64 位应用程序进行了尝试,结果是一样的。我还为链接器尝试了 /LARGEADRESSAWARE 选项。但是我找不到解决方案。
我知道这可能与我使用了多少 RAM 有关,但是当我使用 3.02GB RAM 并尝试分配 2GB 时,它也崩溃了。
我该如何解决这个问题?
你的记忆是碎片化的。您要求一大块 1GB,但没有这样的块可用。可能有十个 512MB 的块可用,但这还不够好。
您的问题是您在导致整数溢出的乘法中使用类型 int
,它是一个 32 位整数(1024 * 1024 * 1024 * 2 产生负结果, 32 位 int
).
您应该改用 size_t
(假设您的 OS 是 64 位的,无论您的应用是否是)。