我在使用strtok的valgrind中发现了一些内存泄漏,我不确定为什么会发生这种情况。
可能丢失: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);
}我在我的main中调用这个函数。
const char *pPath;
pPath = getenv("PATH");
if (pPath == NULL)
perror("PATH");
parsePath(pPath, pathing);发布于 2014-12-03 18:17:10
这很可能是来自valgrind的误报。
一般来说,内存泄漏在现代C++中不是一个大问题,但您显然正在使用一种较旧的样式。如果你只使用std::string,比如Boost.Tokenizer,就不会泄露任何东西。
https://stackoverflow.com/questions/27263753
复制相似问题