返回TCHAR *类型向量的函数不能正确返回它

时间:2013-07-14 22:08:22

标签: c++ windows winapi

下面的函数没有正确返回向量,因为如果我想在另一个函数中使用这个数组的某个元素,它总是 - > `< - 。也许我正在错误地返回向量?我评论了引起问题的线条。

vector< TCHAR* > GetListOfModules( HANDLE proc )
{
    HMODULE hMods[ 1024 ];
    DWORD cbNeeded;

    vector< TCHAR * > ListOfNames;
    if( EnumProcessModules( proc, hMods, sizeof( hMods ), &cbNeeded ) )


 {
        for ( int i = 0; i < ( cbNeeded / sizeof( HMODULE ) ); i++ )
        {

            TCHAR szModName[ MAX_PATH ];
            if ( GetModuleFileNameEx(proc, hMods[ i ], szModName,
                                      sizeof( szModName ) / sizeof( TCHAR )) )
            {
                char * ptr = strrchr( szModName,'\\' );
                if( ptr != NULL )
                    strcpy( szModName, ptr+1 );
                ListOfNames.push_back( ( TCHAR * )szModName );
                //cout << ListOfNames[ i ] << endl; // it works
            }
        }
    }
    return ListOfNames;
}

void main()
{

    vector < TCHAR * > test;
    test = GetListOfModules( GetHandleByName( "explorer.exe" ) );
    //cout << test[1]; // it doesn't work
    cin.get();
}

1 个答案:

答案 0 :(得分:2)

您正在存储指向for循环本地变量的指针。它似乎是第一次工作,因为你处于相同的迭代,但实际上这是幸运的。返回指针或对范围局部变量的引用不是您可以在C ++中执行的操作。您应该动态分配TCHAR *数组并将unique_ptr存储在向量中,或者改为使用字符串。

TCHAR szModName[ MAX_PATH ];

此变量在每次迭代时都会被覆盖。

P.S:void main是非标准的,请使用int main。