C++ 使用新的内存分配失败
我已使用运算符new分配内存。需要分配内存的数据类型是'uint8_t',我使用'uint32_t'类型作为大小。比如说,C++ 使用新的内存分配失败,c++,memory,memory-management,C++,Memory,Memory Management,我已使用运算符new分配内存。需要分配内存的数据类型是'uint8_t',我使用'uint32_t'类型作为大小。比如说, ptr = new uint8_t[size]; 其中,ptr为uint8型,尺寸为uint32型 现在,我们得到了内存崩溃,它指向代码中的这种分配类型,抛出的错误消息是: “\u int\u malloc:断言(无符号长)(大小)>=(无符号长)(nb)失败。” 我们的一位团队成员认为,ptr和尺寸的不匹配是导致此次事故的原因,我不同意他的观点 请解释这是否是坠机的原因
ptr = new uint8_t[size];
其中,ptr为uint8型,尺寸为uint32型
现在,我们得到了内存崩溃,它指向代码中的这种分配类型,抛出的错误消息是:
“\u int\u malloc:断言(无符号长)(大小)>=(无符号长)(nb)失败。”
我们的一位团队成员认为,ptr和尺寸的不匹配是导致此次事故的原因,我不同意他的观点
请解释这是否是坠机的原因,如果是,如何解释
另外,请解释我们收到上述错误消息的情况。大小的类型实际上并不重要:不管它是什么类型,它本质上是作为参数传递给接受大小的函数
uint32_t size = 10;
uint8_t *ptr = new uint8_t[size];
这是完全有效的代码,不需要协调ptr
和size
的类型
您在此行遇到的错误表明内存分配库中存在内部错误。当您的程序在其他地方做了一些非法的事情,破坏了程序的状态时,它可能看起来是由合法代码引起的
您可以使用其他一些分析工具(如valgrind、ubsan或静态分析仪)找到最初的原因。@CoryKramer为什么不允许您这样做?如果我需要1024个字符长的文本作为数组呢?数组大小的类型与数组所包含的数据类型之间的不匹配导致错误听起来很荒谬。-除非我误解了提问者或你的评论。Shivakumar-尺寸有多大?你确定一旦你不用ptr就可以免费使用它吗?@Rochet2我想我误解了他们的问题。我认为
ptr
属于uint32\u t*
类型,但他们正在分配一个新uint8\u t[]
@Rochet2我们将持续写入大小为1476的数据,是的,一旦我们不使用它,我们将释放ptr。这个问题不是每次都能发现,但到目前为止,我们测试了100次,其中有2次出现了。