Ĺadny brzuch
Używa może ktoś kompilatora Dev-Cpp?? Mam w nim problem z operatorami new i delete - tzn. użycie delete nie usuwa obiektu (moge wywoływać go w nieskończoność - żadnego komunikatu, błędu, nic). Co więcej - po użyciu obiekt nadal istnieje... Help!
no wiec po kolei ;) wykonanie operacji powiedzmy:
int *ptr = new int[20];
delete ptr;
delete[] ptr;
delete[] ptr;
ptr[4] = 10;
ptr[100] = 100;
w wiekszosci przypadkow moze nie objawiac sie zadnym bledem w normalnym trybie pracy programu, bo pierwsza linia z operatorem new rezerwuje pamiec pod 20 elementowa tablice intow i wskaznik do jej poczatku przypisuje do zmiennej ptr. i teraz jesli dokonasz zwolnienia [poprawnego lub niepoprawnego] to generalnie program ci sie nie wyspie. chociaz ptr juz nie pokazuje na nic sensownego, to jednak pokazuje na jakis obszar pamieci i calkiem mozliwe ze obszar ten nie zostanie zajety i zapisany innymi danymi, wiec dalej mozna odczytywac z niego wartosci, ale jest to wysoce ryzykowne, a przede wszystkim dzialanie kodu w takim przypadku jest niezdefiniowane [czyli moze sie zdarzyc wszystko].mozna rowniez zapisywac zupelnie poza obszarem, ktory rezerwowalismy [ptr[100]=100] i moze sie zdarzyc ze nie dostaniemy zadnego bledu.
w bcb aby wylapac takie bledy nalezy sobie wlaczyc CodeGuard'a [w opcjach projektu]. Jest to naprawde potezne narzedzie i w zasadzie kazdy poczatkujacy powinien miec je wlaczone przy tworzeniu kazdego nawet najprostszego programu. oszczedza to mase czasu i uczy jak poprawnie programowac.
co do dev-cpp to jest w nim debug [po polsku odpluskwiacz], ktory potrafi wykrywac wspomniane przez ciebie errory, ale osobiscie zadko z niego korzystam. najlepiej odpal sobie helpa do dev-cpp i poczytaj o debug [cos w stylu introduction to debug]. z tego co pamietam to trzeba w opcjach projektu w opcajch linkera wlaczyc generowanie debug inforamtion i odpalic tryb debug przez f8. no ale dziala to troche srednio, ale dziala :) o wiele lepszy jest jednak codeGuard z bcb.
to chyba tyle :chytry:
pozdrawiam
pepsi^no1
dzięki wielkie!:D
gwoli ścisłości Dev-C++ to nie kompilator tylko IDE. Domyslnie korzysta z dołączonego windowsowego portu gcc, ale można podpiąć ytez jakiś inny kompilator.
_______________________________________________________________________
Zajrzyj na http://hno.freeshell.org - artykuły, tipsy, soft, programowanie, Linux i inne.
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
no wiec po kolei ;) wykonanie operacji powiedzmy:
int *ptr = new int[20];
delete ptr;
delete[] ptr;
delete[] ptr;
ptr[4] = 10;
ptr[100] = 100;
w wiekszosci przypadkow moze nie objawiac sie zadnym bledem w normalnym trybie pracy programu, bo pierwsza linia z operatorem new rezerwuje pamiec pod 20 elementowa tablice intow i wskaznik do jej poczatku przypisuje do zmiennej ptr. i teraz jesli dokonasz zwolnienia [poprawnego lub niepoprawnego] to generalnie program ci sie nie wyspie. chociaz ptr juz nie pokazuje na nic sensownego, to jednak pokazuje na jakis obszar pamieci i calkiem mozliwe ze obszar ten nie zostanie zajety i zapisany innymi danymi, wiec dalej mozna odczytywac z niego wartosci, ale jest to wysoce ryzykowne, a przede wszystkim dzialanie kodu w takim przypadku jest niezdefiniowane [czyli moze sie zdarzyc wszystko].mozna rowniez zapisywac zupelnie poza obszarem, ktory rezerwowalismy [ptr[100]=100] i moze sie zdarzyc ze nie dostaniemy zadnego bledu.
w bcb aby wylapac takie bledy nalezy sobie wlaczyc CodeGuard'a [w opcjach projektu]. Jest to naprawde potezne narzedzie i w zasadzie kazdy poczatkujacy powinien miec je wlaczone przy tworzeniu kazdego nawet najprostszego programu. oszczedza to mase czasu i uczy jak poprawnie programowac.
co do dev-cpp to jest w nim debug [po polsku odpluskwiacz], ktory potrafi wykrywac wspomniane przez ciebie errory, ale osobiscie zadko z niego korzystam. najlepiej odpal sobie helpa do dev-cpp i poczytaj o debug [cos w stylu introduction to debug]. z tego co pamietam to trzeba w opcjach projektu w opcajch linkera wlaczyc generowanie debug inforamtion i odpalic tryb debug przez f8. no ale dziala to troche srednio, ale dziala :) o wiele lepszy jest jednak codeGuard z bcb.
to chyba tyle :chytry:
pozdrawiam
pepsi^no1
dzięki wielkie!:D
gwoli ścisłości Dev-C++ to nie kompilator tylko IDE. Domyslnie korzysta z dołączonego windowsowego portu gcc, ale można podpiąć ytez jakiś inny kompilator.
_______________________________________________________________________
Zajrzyj na http://hno.freeshell.org - artykuły, tipsy, soft, programowanie, Linux i inne.