【问题标题】:More than 1GB memory allocation error超过 1GB 内存分配错误
【发布时间】: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


【解决方案1】:

你的记忆是支离破碎的。您要求一个 1GB 的大块,但没有这样的块可用。很可能有 10 个 512MB 块可用,但这还不够。

【讨论】:

    【解决方案2】:

    您的问题是您在乘法中使用了 int 类型,它是一个 32 位整数,导致整数溢出(1024 * 1024 * 1024 * 2 使用 32 位 @ 987654322@).

    您应该改用size_t(假设您的操作系统是 64 位,无论您的应用程序是否是)。

    【讨论】:

      猜你喜欢
      • 2011-11-12
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      • 1970-01-01
      • 2016-10-29
      • 2023-03-28
      • 2023-03-17
      • 2012-11-27
      相关资源
      最近更新 更多