【发布时间】:2012-12-28 09:34:23
【问题描述】:
我遇到了 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
我不知道这个程序有什么问题。
【问题讨论】:
-
检查
p在strtok之后是否为NULL。 -
在调试器下运行程序以确定它们做错了什么也是一个好主意。
-
这里不需要调试器,valgrind 准确地说明了这里发生了什么。 @ user1934103,请阅读它告诉你的内容。
0x0在它所指示的地方可能是什么地址?所以它告诉你p是0。