Statyczny wskaźnik na wskaźnik w klasie

0

Hej w trakcie pisania programu zostałem zaskoczony tym błędem:

załóżmy, że stworzyłem sobie klase ze statycznym podwójnym wskaźnikiem typu char:

class test{
public:
 static char **wsk;
};

pozniej deklaruje w programie i przez new, tworze do niego tablice:

char** test::wsk;
(...)
main()
{
    *test::wsk=new char[5];
}

i tu jest problem, bo chociaz taki program sie kompiluje, to jednak jak sie wlacza to program przy tym sie wysypuje...
Ma ktos moze jakis pomysl, jak to dobrze rozwiazac?

0

Ja nie widzę tu nic dziwnego, dziwne byłoby gdyby się nie wysypywał...

rozumiem, że wcześniej nie zarezerwowałeś miejsca na wsk,

*test::wsk=new char[5];

w tym miejscu wartość którą zwróci new próbujesz zapisać do wsk, który na nic nie wskazuje i stąd masz AccessViolation, zawsze zwróć uwagę, gdy używasz operatora *, czy wskaźnik wskazuje na miejsce gdzie możesz dokonać zapisu...

0

ok, problem rozwiazany przepraszam za zawracanie glowy [glowa] :/ [green]

prawidlowy zapis:

char** test::wsk;
(...)
main()
{
 test::wsk=new char*[5];
}

troche zmylilo mnie to, ze Dev zaakceptowal zapis jaki zastosowalem w tym poście powyżej... ciekawe dlaczego? :-| [???]

pozdrawiam, dzieki za pomoc

0
los problemos napisał(a)

...
troche zmylilo mnie to, ze Dev zaakceptowal zapis jaki zastosowalem w tym poście powyżej... ciekawe dlaczego? :-| [???]
...

może dlatego, że nie ma w nim nic niepoprawnego z punktu widzenia składni?

0

uwaga do Wicko: tak, pierwszy post. ale chyba nie zauwazyles ze POD pierwszym postem byl DRUGI post, w ktorym bylo napisane "POPRAWKA". zmergowalem posty. teraz wyglada tak jak autor chcial zeby wygladal w jednym kawalku. na drugi raz czytaj calosc dyskusji, a nie tylko wybrane posty..

i do losproblemos: kompilator to puscil, poniewaz:
wsk ma typ (char) czyli char*
new char[5] ma typ char*
czyli lewy i prawy typ sa takie same, lewy typ jest lvalue'm, wiec podstawienie jest mozliwe. blad polega na tym, ze WARTOSC wskaznika po lewej stronie ktorego traktowales gwiazdka wynosi 0x000000, i *(0x00000) wali klasycznym bledem nullpointer dereference/access violation/etc.. jak na to dluzej popatrzysz i pomyslisz, na pewno skojarzysz czemu ta linia jest poprawna skladniowo i czemu kompilator sie nie burzyl..

1 użytkowników online, w tym zalogowanych: 0, gości: 1