我在與Valgrind的一個問題: 這是我的節目(以及在錯誤出現的主要部分):Valgrind的:大小的無效讀出的1
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
我想不出有什麼用此程序的問題。
在'strtok'之後檢查'p'是否爲NULL。 – DCoder
在調試器下運行程序以確定他們做錯了什麼也可能是一個好主意。 –
此處不需要調試器,valgrind正是在這裏說明發生了什麼。 @ user1934103,請閱讀它告訴你的內容。在它指示的地方,什麼地址可以是'0x0'?所以它告訴你'p'是'0'。 –