我創建了一個函數來分析字符串,看起來像「NAME:Sebastion | AGE:4 | DATE:8/2/2005」,我試圖得到年「2005年」。我寫了一個函數如下。當我稱之爲「atoi」時,在線上出現段錯誤。在Valgrind的告訴我,我調用「atoi」函數後,代碼會導致段錯誤
Invalid read of size 1
==25142== at 0x5171167: ____strtol_l_internal (strtol_l.c:298)
==25142== by 0x516DB6F: atoi (atoi.c:27)
==25142== by 0x400AB4: inYear (prelab8.c:115)
==25142== by 0x40094E: main (prelab8.c:46)
==25142== Address 0x0 is not stack'd, malloc'd or (recently) free'd
int inYear(char* string)
{
char* word;
word= strtok(string, "|");
word= strtok(NULL,"|");
word= strtok(NULL,"|");
char * new;
new = strtok(word,":");
new= strtok(NULL,"/");
new= strtok(NULL,"/");
new= strtok(NULL,"/");
//printf("%s\n",new);
int year;
year= atoi(new); // segfault
//printf("%d\n",year);
if(year!=2005)
return 0;
return 1;
}
[無法重現](http://melpon.org/wandbox/permlink/Ypx2LJdIJJag1Zjb)。請發佈[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 – MikeCAT
你有沒有嘗試單步執行調試器中的代碼? – Cornstalks
該代碼應該與該字符串一起使用。但是,在現實生活中,你應該檢查你從'strtok'得到的返回值。 segfault是由'NULL'指針傳遞給'atoi'引起的。 – user3386109