c++ 返回NULL值的向量

jogvjijk  于 2023-01-18  发布在  其他
关注(0)|答案(1)|浏览(163)

我遇到了一个问题,让我的向量返回数据。我传入一个向量到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;

}
kninwzqo

kninwzqo1#

谢谢你@贾米特和@理查德克里顿!
返回一个值而不是使用指针/引用解决了这个问题。使用std::wstring而不是WCHAR* 也使我的代码得到了很好的清理

相关问题