我在malloc上面临分配内存的问题:
ByteArr = (BYTE *)malloc(sizeof(SHORT) * 20);
我收到错误
"CXX0030: Error: expression cannot be evaluated"
但如果我拿428或1024而不是20分配内存。可以告诉我问题在哪里...谢谢。
答案 0 :(得分:4)
扩展lavino的答案以及当你使用像1024这样的值时不会发生这个问题的事实告诉我你正试图从你已分配的内存中读取/写入。看起来你已经分配了20个短裤,并尝试用ByteArr指针读取第100个短路。这将在调试器中显示“表达式无法评估”错误。
答案 1 :(得分:2)
我不确定为什么它适用于其他值,但它无法评估的表达式可能是ByteArr的缺失变量。您具有指定的类型,但没有要分配的变量。
BYTE *myByteArr = (BYTE *)malloc(sizeof(SHORT) * 20);
答案 2 :(得分:1)
<强>更新强>
这是调试器中的一条消息,告诉您返回指向的内存不是有效的内存块。
[Not this] 返回值ENOMEM
?如果是这样,由于某种原因,没有分配内存,或者目标变量与malloc()
调用的返回值不兼容。
[Not this] ByteArr
的类型是什么?这是BYTE*
,对吗?而不是BYTE[]
?
[怎么样?] 在调试器消息发出时,ByteArr
是否仍然指向malloc()
调用返回的同一地址?您可能不在数组的末尾,或者完全在分配的内存块之外。
答案 3 :(得分:0)
我想问题是它应该是:
Byte* ByteArr = (BYTE *)malloc(sizeof(SHORT) * 20);
而不是:
Byte ByteArr = (BYTE *)malloc(sizeof(SHORT) * 20);
现在,我不确定您的代码中的ByteArr是什么,但是从您的一条评论到另一条答案,我有点认为这是问题所在。
答案 4 :(得分:0)
答案 5 :(得分:0)
我觉得在分配之前可能还有一个分配,并且你已经完成了分配的内存空间的运行。然后再次尝试在此处进行分配,其中malloc逻辑可能会失败。
malloc没有找到下一个空闲块,因为之前的情况是过度运行,因此无法为所提到的空间进行分配,如果你给1024 malloc找到一个可用空间可用且可以分配的块。< / p>
尝试修复该分配,然后解决此问题。
答案 6 :(得分:0)
我认为你正在纠正你软件中其他地方的记忆。 尝试使用IBM的Rational PurifyPlus工具或Bounds Checker。