New w funkcji.
Ostatnio zmodyfikowano 2018-03-11 18:48
Wuwus1 Temat założony przez niniejszego użytkownika |
New w funkcji. » 2018-03-11 18:14:44 Podczas pisania mojego zadania natrafiłem na problem związany z dynamicznym przydziałem pamięci. Mam tablicę abstrakcyjnych obiektów bazowych (pracownik). I używam funkcji, która pobiera typ pracownika i wskaźnik na jeden obiekt bazowy. void creator( const char type, abstr_emp * pcp ); . Funkcję wywołuję tak creator( ch, pc[ count ] ); . Zauważyłem, że funkcja przypisuje nowy adres ale od razu po jej zakończeniu jest resetowany. Przed wywolaniem funkcji: CCCCCCCC W funkcji: 006058B0 Po wywolaniu funkcji: CCCCCCCC . |
|
YooSy |
» 2018-03-11 18:25:53 Napisany program wysypuje sięAdres: 0xCCCCCCCC Pamięć niezainicjalizowana na stosie. Wskazuje te, że odczytujesz adres wskaźnika inicjaliwanego lokalnie i doczytujesz jego adress przed inicjalizacją i po zwolnieniu adresu na stosie. |
|
pekfos |
» 2018-03-11 18:33:03 Zauważyłem, że funkcja przypisuje nowy adres ale od razu po jej zakończeniu jest resetowany. |
Nie jest resetowany, bo niczego nie przypisujesz. Modyfikujesz lokalną kopię wskaźnika. |
|
Wuwus1 Temat założony przez niniejszego użytkownika |
» 2018-03-11 18:38:08 Jak więc przekazać "oryginał", a nie kopię wskaźnika na obiekt? |
|
pekfos |
» 2018-03-11 18:39:40 |
|
Wuwus1 Temat założony przez niniejszego użytkownika |
» 2018-03-11 18:44:58 Już próbowałem ale dostaje błędy przy znaku '='. A jak próbuję wyłuskać to dostaje kolejny błąd. void creator( const char type, abstr_emp & pcp ) { switch( type ) { case Employee: pcp = new employee; break; ...
|
|
YooSy |
» 2018-03-11 18:46:06 |
|
Wuwus1 Temat założony przez niniejszego użytkownika |
» 2018-03-11 18:48:24 Ok działa. Dziękuję wszystkim za pomoc. |
|
« 1 » |