Stack around the variable was corrupted
Ostatnio zmodyfikowano 2010-01-28 00:35
Mapet Temat założony przez niniejszego użytkownika |
Stack around the variable was corrupted » 2010-01-27 21:31:49 Witam. Mam mały problem z programem który testuje funkcje wirtualne oraz RTTI.
#include "stdafx.h" #include <iostream> using namespace std;
class figura { protected: double s; public: virtual void area() = 0; virtual void disp(); };
void figura::disp() { cout << s << endl; }
class circle : public figura { private: double r; public: circle( double rr ) { r = rr; } void area(); void disp(); };
void circle::area() { const double PI = 3.14; s = 3.14 * r * r; }
void circle::disp() { cout << "Circle : "; figura::disp(); }
class trojkat : public figura { private: double a, h; public: void setdata( double aa, double hh ) { a = aa; h = hh; } trojkat( double aa, double hh ) { a = aa; h = hh; } void area(); void disp(); };
void trojkat::area() { s = a * h / 2; }
void trojkat::disp() { cout << "trojkat : "; figura::disp(); }
class prostokat : public figura { private: double a, b; public: prostokat( double aa, double bb ) { a = aa; b = bb; } void setdata( double aa, double bb ) { a = aa; b = bb; } void disp(); void area(); };
void prostokat::disp() { cout << "prostokat : "; figura::disp(); }
void prostokat::area() { s = a * b; }
int _tmain( int argc, _TCHAR * argv[] ) { trojkat t1( 2, 4 ); circle c1( 10, 5 ); prostokat p1( 2, 6 ); figura * ptr_fig[] = { & t1, & p1, & c1 }; prostokat * ptr_prostokat; trojkat * ptr_trojkat; int i, imax = 10, ind; for( i = 0; i < imax; i++ ) { ind = rand() % 3; cout << "Wskaznik ptr_fig pokazuje teraz na : " << typeid( * ptr_fig[ ind ] ).name() << endl; ptr_fig[ ind ]->area(); ptr_fig[ ind ]->disp(); if( ptr_prostokat = dynamic_cast < prostokat *>( ptr_fig[ ind ] ) ) { ptr_prostokat->setdata( 10, 12 ); ptr_fig[ ind ]->area(); ptr_fig[ ind ]->disp(); } ptr_trojkat =( trojkat * ) ptr_fig[ ind ]; ptr_trojkat->setdata( 20, 30 ); } system( "pause" ); return 0; }
Niby działa ale na podczas zamykania programu programu wywala blad Run-Time Check Failure #2 - Stack around the variable 'c1' was corrupted.
Blad uszkodzenia obiektu c1:< Google mówią ze przekroczyłem dozwolony obszar na stosie, lecz za chiny nie wiem jak to poprawić. Z góry dzięki za pomoc. |
|
Elaine |
» 2010-01-27 21:50:25 Po chamsku rzutujesz figurę na trójkąt - a co, jeśli figura trójkątem nie jest? Tutaj kończy się to nadpisaniem pamięci innego obiektu. |
|
Mapet Temat założony przez niniejszego użytkownika |
» 2010-01-27 22:06:45 Wielkie dzięki. Część programu była narzucona od nauczyciela, błędu szukałem usilnie w mojej części nie pomyślałem ze profesor przyszykuje nam taka niemiła niespodziankę. Jeszcze raz ślicznie dziękuje. |
|
DejaVu |
» 2010-01-28 00:35:38 Skoro problem rozwiązany, temat zamykam. Patrząc na kod mimo wszystko myślę, że Ty dopisałeś błędny kod, tj. ptr_trojkat =( trojkat * ) ptr_fig[ ind ]; ptr_trojkat->setdata( 20, 30 ); Jeśli ten kod natomiast był, a nie było tego z dynamic_cast'em to błąd leżał po stronie prowadzącego. Być może był on celowy i zadanie polegało na jego usunięciu. PS. Czy moderatorzy mogą poprawiać takie pierdoły jak kolorowanie kodu? Chyba nie muszę wszystkiego sam poprawiać... |
|
« 1 » |