内存分配失败使用新的

时间:2016-01-05 12:35:38

标签: c++ memory memory-management

我使用operator new分配了内存。需要分配内存的数据类型是'uint8_t',我使用'uint32_t'类型作为大小。例如,

ptr = new uint8_t[size];

其中ptr的类型为uint8_t,size的类型为uint32_t。

现在,我们遇到内存崩溃,指向我们的代码中的这种类型的分配,并抛出错误消息:

“_ int_malloc:断言(无符号长)(大小)> =(无符号长)(nb)失败。”

我们的一名团队成员表示,ptr和大小的不匹配是导致崩溃的原因,我不同意他的看法。

请解释这是否可能是导致坠机的原因,若然,怎么办?

此外,请解释我们收到上述错误消息的情况。

1 个答案:

答案 0 :(得分:3)

size的类型并不重要:无论它是什么类型,它基本上都作为参数传递给一个带size_t的函数。

uint32_t size = 10;
uint8_t *ptr = new uint8_t[size];

这是完全有效的代码,不需要协调ptrsize的类型。

您在此行遇到的错误表示内存分配库中存在内部错误。当你的程序在其他地方做过非法破坏程序状态时,它似乎是由合法代码引起的。

您可以通过使用其他分析工具(如valgrind,ubsan或静态分析器)找到最初的原因。