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

Operator new i jego użycie w klasie

Ostatnio zmodyfikowano 2010-01-16 21:11
Autor Wiadomość
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ą.
P-13054
Elaine
» 2010-01-16 18:50:41
Wygląda na to, że zmienna mimo wszystko jest niezainicjalizowana.
P-13056
malan
» 2010-01-16 18:52:04
C/C++
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:
C/C++
void X::zeruj()
{
    for( int i = 0; i < rozmiar; i++ ) tab[ i ] = 0;
   
}
P-13057
Elaine
» 2010-01-16 18:52:50
Mhm, on właśnie taki kod ma...
P-13058
malan
» 2010-01-16 18:55:15
W takim razie te zapisy są równe:
C/C++
for( int i = 0; i < rozmiar; i++ ) tab = 0;
//...
for( int i = 0; i < rozmiar; i++ ) tab[ i ] = 0;

?
P-13060
Elaine
» 2010-01-16 18:58:41
Ech... http://forum.ddt.pl/editpost.php?Tid=1885&Pid=13893 - wątpisz w to co widzisz?
P-13061
malan
» 2010-01-16 19:04:12
Dobra już wiem, o co chodzi ;p, sory.
P-13064
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.
P-13067
« 1 » 2
  Strona 1 z 2 Następna strona