Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[C++] вариант решения... 21.07.01 03:15 Число просмотров: 899
Автор: c0x@mail.ru Статус: Незарегистрированный пользователь
|
Ну ты и нагородил!
Вместо того, чтобы использовать "умный" массив, ты предлагаешь на каждый экземпляр указываемого типа заводить некий флаг, который должен потвоемумнению отслеживать существует обьект или нет. Это же сплошная чушь.
Ну насмешил - век так не смеялся!
> > > > Как в С++ обноружить выход за пределы границ > > массива и > > > > всякие разные плохие укозатели??? > > > > Напиши под винду дорогой > Но насчет ^^^^^^^^ это к cb :) его главное озадачить в > ПРАВИЛЬНОМ направлении ... > > > > >
> > int main()
> > {
> > int a[4];
> > a[4]=666;
> >
> > return 0;
> > }
>
>
> >
> > ---
> > > проверяй указатель на NULL. > > > > с чего это он вдруг станет NULL? > > > > Если речь идет о C++ > то ... > > #include <iostream>
> template <class T>
> class Safe
> {
> T value;
> int protect;
> public:
>
> Safe<T>(){protect=0x666;}
> Safe<T>(T& a){protect=0x666;}
> ~Safe<T>(){protect=0x999;}
>
> T& GetValue() {return value;}
>
> Safe<T>& operator = (const T a) throw(T)
> {
> if(protect!=0x666) throw a;
> value=a;
> return *this;
> }
>
> friend ostream& operator << (ostream& os,
> Safe<T>& a) throw(T)
> {
> if(a.protect!=0x666) throw a.value;
> os << a.value;
> return os;
> }
> };
>
> int main()
> {
> Safe<int> a[4];
> int b=2;
> // Проверяем на выход за границу массива
> try {
> a[0]=1;
> cout << "a[0]=" << a[0] << "\n"
> << flush;
> a[1]=b;
> cout << "a[1]=" << a[1] << "\n"
> << flush;
> a[4]=666;
> cout << "a[4]=" << a[4] << "\n"
> << flush;
> } catch(int a)
> {
> cout << "Bad index !\n" << flush;
> }
> char xxx[40];
> memcpy(&a[1],xxx,sizeof(Safe<int>)*3);
> //Сейчас наши указатели указывают на "мусор"
> try {
> cout << "a[0]=" << a[0] << "\n"
> << flush;
> cout << "a[4]=" << a[1] << "\n"
> << flush;
> } catch(int a)
> {
> cout << "Bad pointer !\n" << flush;
> }
>
> return 0;
> }
>
> ---
> > Но все операторы придется написать самостоятельно, это > несложно...
|
|
|