Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zwracanie wskaźnika do lokalnej zmiennej

Ostatnio zmodyfikowano 2013-07-15 12:21
Autor Wiadomość
rwfx1911
Temat założony przez niniejszego użytkownika
Zwracanie wskaźnika do lokalnej zmiennej
» 2013-07-15 00:55:24
Mam taką funkcje, wiem dlaczego nie działa ale nie potrafie jej naprawić więc to takie pytanie "Do you haz teh codez?". Trzeba użyć dynamicznej alokacji pamięci. Czasami muszę popatrzeć na kod żeby zrozumieć, z góry dzięki.

C/C++
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; // dziala
            }
        }
    }
    return ListOfNames;
}

void main()
{
   
    vector < TCHAR * > test;
    test = GetListOfModules( GetHandleByName( "explorer.exe" ) );
    //cout << test[1]; // nei dziala bo juz nie ma tamtej zmiennej ;/
    cin.get();
}

P-87880
unimator
» 2013-07-15 02:00:43
To:
C/C++
strcpy( szModName, ptr + 1 );

ListOfNames.push_back(( TCHAR * ) szModName );
nie będzie działać tak jak zapewne myślisz. SzModName jest ciągle przez Ciebie nadpisywane i wszystkie elementy ListOfNames na to samo wskazują koniec końców. W main próbujesz się odwołać właśnie do tej zmiennej (lokalnej).
P-87882
rwfx1911
Temat założony przez niniejszego użytkownika
» 2013-07-15 11:51:09
Ale jak powinno być dobrze?
P-87901
pekfos
» 2013-07-15 12:11:45
Z std::string/std::wstring.
P-87907
rwfx1911
Temat założony przez niniejszego użytkownika
» 2013-07-15 12:13:05
Wiem, że można jakoś z dynamiczną alokacją pamięci i chciałbym zobaczyć jak. Trzeci argument GetModuleFileNameEx wymaga typu LPSTR i nie da sie przeprowadzić konwersji ze stringu.
P-87908
pekfos
» 2013-07-15 12:20:20
W takim razie zaalokuj odpowiednio duży blok pamięci, skopiuj dane z tablicy i wrzuć do vectora. Potem musisz ten blok zwolnić.
P-87911
rwfx1911
Temat założony przez niniejszego użytkownika
» 2013-07-15 12:21:39
OK, już sobie poradziłem. Dzięki.
P-87912
« 1 »
  Strona 1 z 1