C++ 返回TCHAR*类型向量的函数不';我不能正确地返回它
下面的函数没有正确返回向量,因为如果我想在另一个函数中使用此数组的某个元素,它总是-->`存储指向for循环本地变量的指针。这似乎是第一次工作,因为您在同一个迭代中,但实际上这只是幸运的。将指针或引用返回到范围局部变量不是C++中可以做的事情。您应该动态分配TCHAR*数组并在向量中存储unique_ptr,或者改用字符串C++ 返回TCHAR*类型向量的函数不';我不能正确地返回它,c++,windows,winapi,C++,Windows,Winapi,下面的函数没有正确返回向量,因为如果我想在另一个函数中使用此数组的某个元素,它总是-->`存储指向for循环本地变量的指针。这似乎是第一次工作,因为您在同一个迭代中,但实际上这只是幸运的。将指针或引用返回到范围局部变量不是C++中可以做的事情。您应该动态分配TCHAR*数组并在向量中存储unique_ptr,或者改用字符串 TCHAR szModName[MAX_PATH] 这里的变量在每次迭代时都会被覆盖 S:Valuemain是非标准的,请使用int main。C++中不需要< 主< >
TCHAR szModName[MAX_PATH]代码>
这里的变量在每次迭代时都会被覆盖
S:Valuemain是非标准的,请使用int main。C++中不需要< <代码>主< <代码> > <代码> >返回0 < /C>。从
main
的末尾掉下来相当于隐式的return 0
@celtschk我仍然喜欢返回一些东西,但这确实不是严格必要的。值得明确的是,不允许返回指向局部范围变量的指针,而不是建议它“第一次起作用”。它根本不起作用。如果它似乎起作用,那只是一种共现。
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();
}