gpt4 book ai didi

c - Valgrind:大小 1 的无效读取

转载 作者:太空狗 更新时间:2023-10-29 16:30:29 25 4
gpt4 key购买 nike

我对 valgrind 有疑问:这是我的程序(以及出现错误的主要部分):

int main()
{
char comanda[N];
....
char *p;
while( fgets(comanda,100,stdin)!=NULL)
{
p=strtok(comanda," \n");
if (strcmp(comanda,"INIT")==0)
{
p=strtok(NULL," ");
Init(n);
}
395 >>if (strcmp(p,"DUMP")==0)
{
Dump(n);}
if (strcmp(p,"ALLOC")==0)
{
Alloc(j,n);
}
....return 0;}

当我运行 valgrind 时,它说:

Invalid read of size 1
at 0x401569: main (:395)
Address 0x0 is not stack'd malloc'd or (recently) free'd

我不知道这个程序有什么问题。

最佳答案

如何阅读:

Invalid read of size 1

您的程序正试图从 Valgrind 不喜欢的地方读取一个字节。

at 0x401569: main (:395)

在代码中发生这种情况的地方(显然 strcmp 已被内联)

Address 0x0 is not stack'd malloc'd or (recently) free'd

它读取的地址是什么——0x0 是“NULL”。声明的其余部分只是说明了为什么它无效(它不是来自堆栈,它不是你从 malloc 获得的东西,也不是最近被释放的)。提到“最近”是因为 valgrind 会跟踪有限数量的释放内存,所以它不能肯定地说它没有释放一百万次释放 - 在这种情况下它不是,但如果你看到这样的消息,可能是它已经失效了,因为它在很久以前就被释放了。地址不会为零(或接近零)。

关于c - Valgrind:大小 1 的无效读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14067403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com