2013-07-14 52 views
0

了以下功能不正确地返回向量,因为如果我想使用这个数组的某个元素中的其他功能,它总是- >`< - -。也许我错误地返回了矢量?我评论了导致问题的路线。函数返回TCHAR *型矢量不会返回正确

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(); 
} 
+2

http://stackoverflow.com/a/6445794/1553090 – paddy

回答

2

您正在存储指向for循环局部变量的指针。它似乎第一次工作,因为你在同一个迭代中,但这真是幸运。返回一个指针或引用作用域局部变量不是你可以在C++中做的事情。您应该动态分配TCHAR *数组并将unique_ptr存储在向量中,或者使用字符串代替。

TCHAR szModName[ MAX_PATH ];

这个变量这里在每次迭代得到overwritter。

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

+1

在C++中'main'不需要'return 0'。落在'main'的末尾相当于一个隐含的'return 0'。 – celtschk

+0

@celtschk我仍然喜欢返回一些东西,但确实不是必须的。 – Borgleader

+1

值得一提的是,你不允许*返回一个指向本地作用域变量的指针,而不是暗示它“第一次工作”。它根本不起作用。如果它看起来有效,那只是一个共同点。 – paddy