大概的情况类似这样
class
A
{
DWORD dary[MAX_TYPE]; // MAX_TYPE 是已定义常数
public :
A()
{
dary[TYPE1] = 1 ; // TYPE1 在其他头文件定义, 关键是TYPE1 > MAX_TYPE, SO 越界了
dary[TYPE2] = 2 ; // TYPE2 > MAX_TYPE
}
}
class B
{
int b;
public :
B()
{
b = 0 ;
}
}
void Init()
{
A * pa;
B * pb;
pa = new A; // 虽然构造函数中数组下标越界,但是运行时很“安静”,没有报错
pb = new B; // 运行时提示分配内存错误,刚开始不解,后来才发现是class A中访问内存越界,new B; 的时候用到了越界的内存,所以报错
}
{
DWORD dary[MAX_TYPE]; // MAX_TYPE 是已定义常数
public :
A()
{
dary[TYPE1] = 1 ; // TYPE1 在其他头文件定义, 关键是TYPE1 > MAX_TYPE, SO 越界了
dary[TYPE2] = 2 ; // TYPE2 > MAX_TYPE
}
}
class B
{
int b;
public :
B()
{
b = 0 ;
}
}
void Init()
{
A * pa;
B * pb;
pa = new A; // 虽然构造函数中数组下标越界,但是运行时很“安静”,没有报错
pb = new B; // 运行时提示分配内存错误,刚开始不解,后来才发现是class A中访问内存越界,new B; 的时候用到了越界的内存,所以报错
}