0

我在分配内存时遇到了 malloc 问题:

ByteArr = (BYTE *)malloc(sizeof(SHORT) * 20); 

我收到类似的错误

"CXX0030: Error: expression cannot be evaluated"

但是,如果我使用 428 或 1024 而不是 20 而不是分配内存。你能告诉我问题出在哪里...谢谢。

4

7 回答 7

4

扩展 lavino 的答案以及当您使用 1024 之类的值时不会发生此问题的事实向我表明您正在尝试从您分配的内存之外的内存中读取/写入。看起来您已经分配了 20 个短裤并尝试使用 ByteArr 指针读取第 100 个短裤。这将在调试器中显示“无法评估表达式”错误。

于 2009-07-01T05:35:05.837 回答
2

我不确定为什么它适用于其他值,但它无法评估的表达式可能是 ByteArr 的缺失变量。您已指定类型,但没有要分配的变量。

BYTE *myByteArr = (BYTE *)malloc(sizeof(SHORT) * 20);
于 2009-07-01T05:18:50.473 回答
1

更新:

这是调试器中的一条消息,告诉您返回指向的内存不是有效的内存块。

[不是这个]是返回值ENOMEM吗?malloc()如果是这样,由于某种原因没有分配内存,或者目标变量与调用的返回值不兼容。

[不是这个]是什么类型的ByteArr?是BYTE*吧?而不是BYTE[]

[这个怎么样?]在调试器消息时,是否ByteArr仍然指向调用返回的相同地址malloc()?您可能不在数组的末尾,或者完全在分配的内存块之外。

于 2009-07-01T05:27:05.160 回答
0

我想问题在于它应该是:

Byte* ByteArr = (BYTE *)malloc(sizeof(SHORT) * 20);

代替:

Byte ByteArr = (BYTE *)malloc(sizeof(SHORT) * 20);

现在,我不确定您的代码中的 ByteArr 是什么,但是从您的一个评论到另一个答案,我已经发现这是问题所在。

于 2009-07-01T05:25:14.773 回答
0

我觉得在此分配之前可能还有一个分配,并且您已经过度运行分配的内存空间。然后再次尝试在 malloc 逻辑可能失败的地方进行分配。

malloc 没有找到下一个空闲块,因为之前的情况是过度运行,因此无法为提到的空间分配,如果你给 1024,malloc 正在寻找一个有这么多可用空间并且正在分配的块。

尝试修复该分配,然后此问题将得到解决。

于 2009-07-02T04:21:55.187 回答
0

参考这个页面:

http://www.codeguru.com/forum/showthread.php?t=430940

看来您需要分配更多空间。此外,谷歌总是一个好帮手。

于 2009-07-01T08:01:24.467 回答
0

我认为您正在软件中的其他地方纠正您的记忆。尝试使用IBM 的Rational PurifyPlusBounds Checker之类的工具。

于 2010-03-02T15:01:28.670 回答