Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[C++] вариант решения... 23.07.01 10:54 Число просмотров: 939
Автор: XR <eXtremal Research> Статус: The Elderman
|
> Ну ты и нагородил! > Вместо того, чтобы использовать "умный" массив,
Это тоже вариант который я кстати обычно использую при работе с МАССИВАМИ...
НО он годится
ТОЛЬКО для массивов...
а вопрос стоял несколько шире...
ты
> предлагаешь на каждый экземпляр указываемого типа заводить > некий флаг, который должен потвоемумнению отслеживать > существует обьект или нет.
Я кстати в своих реальных программах при в критических случаях использую
гораздо более изощренный контроль :)
А то что я тут как ты говоришь "нагородил"
это легкий ЭКСПРОМПТ из голова (я надеюсь работающий :))
Дляобщегослучая решения данной проблемы иных вариантов не существует ..
>> Это же сплошная чушь.
Не вижу доказателств данного утверждения в виде кода :)
BTW: Давай будем ОТВЕЧАТЬ за слова. OK?
> Ну насмешил - век так не смеялся! >
Тыб лучше глубже занялся ООД :)
PS: попробуй поймать своим "умным массивом"
Второй вариант, рассмотренный мной ("плохой" указатель)
> > > > > Как в С++ обноружить выход за пределы > границ > > > массива и
> > > > > всякие разные плохие укозатели??? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Вот с этим вот КАК ?
> > > > > > > Напиши под винду дорогой > > Но насчет ^^^^^^^^ это к 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;
> > }
> >
> > ---
> > > > Но все операторы придется написать самостоятельно, это > > несложно...
PS: часть проблем кстати снимается использованием STL
|
|
|