Operator new i jego użycie w klasie
Ostatnio zmodyfikowano 2010-01-16 21:11
Borrsuk Temat założony przez niniejszego użytkownika |
Operator new i jego użycie w klasie » 2010-01-16 18:47:36 Mamy klasę X, która ma zmienną int* tab;
w konstruktorze wykonywana jest operacja
tab= new int[rozmiar];
dalej gdzieś jest funkcja zerująca tą tablicę
void X:: zeruj() { for(int i =0;i<rozmiar;i++) tab=0; /* w tej linijce wywala błąd */
} w zaznaczonej linijce pojawia mi się błąd :
First-chance exception at 0x01396529 in test.exe: 0xC0000005: Access violation writing location 0xcccccccc. Unhandled exception at 0x01396529 in test.exe: 0xC0000005: Access violation writing location 0xcccccccc.
Pytanie: jak dynamicznie zarezerwować pamięć operatorem new, żeby nie sypało mi tym błędem? Dodam, że jeśli powyższy fragment kodu wykonam poza klasą , błędy nie występują. |
|
Elaine |
» 2010-01-16 18:50:41 Wygląda na to, że zmienna mimo wszystko jest niezainicjalizowana. |
|
malan |
» 2010-01-16 18:52:04 tab = new int[ rozmiar ];
Taki zapis rezerwuję miejsce w pamięci dla rozmiar obiektów. Jeśli chcesz to wyzerować musisz to zrobić jak w przypadku normalnej tablicy: void X::zeruj() { for( int i = 0; i < rozmiar; i++ ) tab[ i ] = 0; } |
|
Elaine |
» 2010-01-16 18:52:50 Mhm, on właśnie taki kod ma... |
|
malan |
» 2010-01-16 18:55:15 W takim razie te zapisy są równe: for( int i = 0; i < rozmiar; i++ ) tab = 0;
for( int i = 0; i < rozmiar; i++ ) tab[ i ] = 0;
? |
|
Elaine |
» 2010-01-16 18:58:41 |
|
malan |
» 2010-01-16 19:04:12 Dobra już wiem, o co chodzi ;p, sory. |
|
Borrsuk Temat założony przez niniejszego użytkownika |
» 2010-01-16 19:10:02 Właśnie problem tkwi w tym, że do wskaźnika int* tab nie jest prawidłowo przypisywany adres utworzonej tablicy i za każdym razem jak się do niej odwołuje ( tab=0) to wywala błąd. |
|
« 1 » 2 |