2013-07-14 51 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