以下是一个示例程序:
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'枚举变量没有用指定的值初始化,但有一些随机的默认值?
答案 0 :(得分:2)
A是三个指针的数组,A [0],A [1]和A [2]。
你有一个指向“LLLL”的指针就可以了。但是当你尝试将指针分配给A [3]时,就没有A [3]这样的对象。
答案 1 :(得分:1)
您将数组A
声明为
const char* A[LAST];
这意味着索引0 .. (LAST-1)
都是有效的。但是,在BASE
构造函数中执行
A[LAST] = "LLLL";
这是对数组的越界访问。
答案 2 :(得分:0)
如果您想要“最后”条目,请尝试以下操作:
enum ABC
{
ZERO,
ONE,
TWO,
LAST = TWO
};