0
我收到一些內存泄漏valgrind與strtok,我不知道爲什麼會發生。內存泄漏與strtok
可能丟失:8個塊中的281個字節。
仍然可達:1個塊中有64個字節。
我也試着用臨時字符指針而不是getenv返回的那個函數調用函數,但是這並沒有幫助。
void parsePath(const char * line, vector<string> &pathing) {
if (line == NULL)
return;
char * s = strdup(line);
if (!s)
exit(1);
char * pch;
pch = strtok(s, ":");
while (pch!=NULL) {
string tmp = string(pch);
pathing.push_back(tmp);
pch = strtok(NULL, ":");
}
free(s);
}
我打電話給我的主要功能。
const char *pPath;
pPath = getenv("PATH");
if (pPath == NULL)
perror("PATH");
parsePath(pPath, pathing);
'pPath'和'line'應該是'const char *'('getenv'返回的字符串是不可修改的)。它應該是'string(pch)'(調用'string'構造函數),而不是'(string)pch'。你應該確保'strdup'返回一個非空指針。 – ooga 2014-12-03 04:52:18
謝謝。我做了你所建議的修改,但是我仍然收到內存泄漏。有什麼我錯過了嗎? – 2014-12-03 04:58:39
此代碼使用C++中STL的'vector',所以它不是C.標記需要從C改爲C++ – user3629249 2014-12-03 05:04:23