程序示例:
class BASE
{
public:
enum ABC
{
ZERO,
ONE,
TWO,
LAST
};
BASE(ABC exp): type(exp)
{
A[ZERO] = "1111";
A[ONE] = "22222";
A[LAST] = "LLLL";
}
virtual const char* what()throw()
{
return A[type];
}
private:
const char* A[LAST];
const ABC type;
};
int main()
{
BASE a(BASE::ONE);
cout<<a.what()<<"n";
return 0;
}
上面的程序以分段错误结束,因为'type'枚举变量没有使用指定的值初始化,而是使用一些随机的默认值?
A是一个包含三个指针的数组,A[0]、A[1]和A[2]。
你有一个指向"LLLL"的指针,这是可以的。但是当你试图将指针赋值给A[3]时,没有A[3]这样的对象
将数组A
声明为
const char* A[LAST];
表示索引0 .. (LAST-1)
都是有效的。但是,在BASE
构造函数中执行
A[LAST] = "LLLL";
是对数组的越界访问
如果你想要一个"LAST"条目,试试这个:
enum ABC
{
ZERO,
ONE,
TWO,
LAST = TWO
};