我正在寫一個程序,需要解析PATH環境變量的分隔符「:」。一切似乎都正常工作,直到函數chop嘗試返回數組。然後我收到以下錯誤:「檢測到glibc ./a.out:損壞的雙鏈表:0x08f8f148」。我使用印章也分析用戶輸入,它工作正常。任何幫助是極大的讚賞。C++:glibc檢測到損壞的雙鏈表:0x08f8f148
//Parse environment variable
char const* pPath = getenv("PATH");
if (pPath == NULL){;}
else{
string ePath(pPath);
envp = chop(ePath,':');
}
char **chop(string s, char c){
int i, j, k, len, words = 0;
len = s.length();
//determine # of words
for(i=0;i<len+1;i++){
if(s[i] == c || s[i] == '\0'){words++;}
}
char **array;
string x;
//allocate memory for char pointers
if((array=(char**)malloc((words+1)*sizeof(char*))) == NULL){return NULL;}
array[0] = &x[0];
i = 0; k = 0;
//split string on char c
for(j = 1; j < (words+1); j++,k++,i++){
//read in characters until delimiter
while (s[k] != c && s[k] != '\0'){
x[i] = s[k];
i++; k++;
}
x[i] = '\0';
array[j] = &x[i+1];
}
array[j] = 0;
return array;
}
錯誤不在您顯示的代碼中。最有可能的是你刪除了兩次。 –
可能重複[什麼是glibc免費/ malloc/realloc無效的下一個大小/無效指針錯誤,以及如何解決它?](http://stackoverflow.com/questions/23680334/what-is-a-glibc-free -malloc-realloc的-無效-下一尺寸無效指針誤差和) – PlasmaHH