Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[C++] вариант решения... 19.07.01 14:43 Число просмотров: 916
Автор: XR <eXtremal Research> Статус: The Elderman Отредактировано 19.07.01 15:06 Количество правок: 4
|
> > > Как в С++ обноружить выход за пределы границ > массива и > > > всякие разные плохие укозатели???
> Напиши под винду дорогой Но насчет ^^^^^^^^ это к 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;
}
---
Но все операторы придется написать самостоятельно, это несложно...
|
|
|