У меня возникают утечки памяти в valgrind с помощью strtok, и я не уверен, почему это происходит.
Возможно потеряно: 281 байт в 8 блоках.
По-прежнему достижимо: 64 байта в 1 блоке.
Я также пытался вызвать функцию с временным указателем 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);
}
Я вызываю функцию в своем основном файле с помощью.
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
возвращает ненулевой указатель. - person ooga   schedule 03.12.2014(string)pch
иstring(pch)
одинаковы. Оба будут вызыватьstd:string::string(const char*)
, поскольку они эквивалентныstatic_cast<std::string>(pch)
- person MSalters   schedule 03.12.2014