我已经阅读了关于这个Valgrind错误的几个主题,其中大多数都提供了本地化的响应。我想确切地知道出了什么问题,以便我将来可以调试这些错误。
我只会发布相关代码,如果有人想要更多,我也会发布相关代码..
所以我在这一行上有一个Invalid read of size 4
:
int t = (p->acts+p->ac)->time;
注意我认为可能涉及错误的指针算法
我在这一行遇到同样的错误,访问同一个成员:
next->time = next->acts[next->ac].time;
我如何进行调试...程序运行正常,但我想知道发生了什么。
如果您需要更多信息,请发表评论。
答案 0 :(得分:1)
该错误表明next->ac
(p->ac
)是超出分配给next->acts
(p->acts
)的内存末尾的值
...即
next->acts = malloc( sizeof( something ) * count );
next->ac = count;
next>acts[next->ac].time = 0;
这会引发错误,因为count
作为数组索引实际上超过了数组的大小(基数为零,所有这些)
换句话说,next->ac >= count
会在我给出的示例中抛出该错误。
您的程序可能正常工作,因为访问已分配内存的末尾是未定义的行为。它可以工作,或者它可以自发地导致谁知道什么是混乱。但是,同样的,访问分配内存的末尾是一个错误。