我遇到了一个问题,让我的向量返回数据。我传入一个向量到getAudioStreams
,它将保存我想要的数据,但当我打印出值时,它们都是空的。在getAudioStreams
中,我有一个指针指向一个值数组,但在每次循环后,向量中的值变为NULL。
我很肯定这是一个范围问题,但我不知道如何解决它。
谢谢你的帮助!
Main.cpp
std::vector<WCHAR*> names;
mvc.getAudioStreams(names);
for (int i = 0; i < names.size(); i++)
{
printf("Main I: %d | %ls\n", i, names.at(i));
}
MainVolumeControl.cpp
void MainVolumeControl::getAudioStreams(std::vector<WCHAR*>& o_streams)
{
...
WCHAR* progName;
int nSessionCount = 5;
for (int n = 0; n < nSessionCount; n++)
{
...
WCHAR wsImageName[MAX_PATH + 1];
DWORD nSize = MAX_PATH;
if (QueryFullProcessImageNameW(hProcess, NULL, wsImageName, &nSize))
{
printf("\nImage: %ls\n", wsImageName);
progName = extractName(wsImageName);
printf("Prog: %ls\n\0", progName);
o_streams.push_back(progName);
}
...
}
...
printf("\n");
for (int i = 0; i < o_streams.size(); i++)
{
printf("I: %d | %ls\n", i, o_streams.at(i));
printf("\n");
}
}
WCHAR* MainVolumeControl::extractName(WCHAR i_imageName[])
{
constexpr u_int LEN_IMAGE_MAX = MAX_PATH + 1;
WCHAR o_progName[LEN_IMAGE_MAX];
... // Extracting the name from a longer string
return o_progName;
}
1条答案
按热度按时间kninwzqo1#
谢谢你@贾米特和@理查德克里顿!
返回一个值而不是使用指针/引用解决了这个问题。使用std::wstring而不是WCHAR* 也使我的代码得到了很好的清理