【发布时间】:2015-01-31 13:05:48
【问题描述】:
我在使用 strtok 的 valgrind 中遇到了一些内存泄漏,我不确定为什么会这样。
可能丢失:8 个块中的 281 个字节。
仍然可以访问:1 个块中的 64 个字节。
我也尝试使用临时 char 指针而不是 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);
【问题讨论】:
-
pPath和line应该是const char *(getenv返回的字符串不可修改)。而不是(string)pch,它应该是string(pch)(调用string构造函数)。并且您应该确保strdup返回一个非空指针。 -
谢谢。我做了你建议的更改,但我仍然遇到内存泄漏。有什么我错过的吗?
-
这段代码使用了C++中STL中的'vector',所以不是C。标签需要从C改成C++
-
可能我错过了,但是在main函数中没有看到pathing的定义
-
我认为问题出在我的程序从 exit(0) 退出时;如果它从返回 0 终止,则没有任何内存问题。
标签: c++ memory memory-leaks strtok