【发布时间】:2016-01-05 12:35:38
【问题描述】:
我已经使用 operator new 分配了内存。需要分配内存的数据类型是“uint8_t”,我使用“uint32_t”类型作为大小。例如,
ptr = new uint8_t[size];
其中 ptr 是 uint8_t 类型,size 是 uint32_t 类型。
现在,我们的代码中出现了指向这种类型分配的内存崩溃,并且抛出的错误消息是:
“_int_malloc: 断言 (unsigned long)(size) >= (unsigned long)(nb) 失败。”
我们的一位团队成员认为 ptr 和大小不匹配是导致崩溃的原因,我不同意他的看法。
请解释这是否是导致崩溃的原因,如果是,如何解释?
另外,请解释我们收到上述错误消息的情况。
【问题讨论】:
-
@CoryKramer 为什么不允许这样做?如果我需要 1024 个字符长的文本作为数组怎么办?数组大小的类型与数组所包含的数据类型之间的不匹配导致错误听起来很荒谬。 - 除非我误解了提问者或您的评论。 Shivakumar - 尺寸有多大?你确定不使用ptr就释放它吗?
-
@Rochet2 我想我误解了他们的问题。我虽然
ptr是uint32_t*类型,但他们正在分配new uint8_t[] -
@Rochet2 我们将连续写入大小为 1476 的数据,是的,一旦我们不使用它,我们就会释放它。不是每次都发现这个问题,但到目前为止,我们测试了 100 次中有 2 次。
标签: c++ memory memory-management