Вы сохраняете адрес findData.cFileName
в vector
N раз.
Вам нужно скопировать это. Возможно использование:
vector<std::wstring> pathList;
РЕДАКТИРОВАТЬ: Другие незначительные моменты:
vector<wchar_t*> pathList = vector<wchar_t*>();
HANDLE dirHandle = new HANDLE;
можно заменить на:
vector<wchar_t*> pathList;
HANDLE dirHandle;
Если вы должны вернуть wchar_t**
, то (например):
// '+1' for NULL terminating string as the callers needs
// know where the array ends.
wchar_t** result = new wchar_t*[pathList.size() + 1];
*(result + pathList.size()) = 0;
for (size_t i = 0; i < pathList.size(); i++)
{
wchar_t* name = new wchar_t[pathList[i].length() + 1];
std::copy(pathList[i].begin(), pathList[i].end(), name);
*(name + pathList[i].length()) = L'\0';
*(result + i) = name;
}
return result;
Вызывающий должен запомнить delete[]
возвращенный массив:
Path p;
wchar_t** list = p.ListDir();
...
for (size_t i = 0; 0 != *(list + i); i++)
{
delete[] *(list + i);
}
delete[] list;
Хотя, поскольку это C ++, вы должны использовать std::vector<std::wstring>
.