我正在编写以下代码,但收到了Stack around variable is corrupted
错误。我检查过类似的帖子,但无法将问题联系起来。我对C++也相当陌生。这是我的密码。
///CLASS DEFINITION
class Trellis{
private:
int m;
int Nstates;
int StateTransition[];
public:
Trellis();
Trellis(int M);
};
以下是方法的定义
Trellis::Trellis(int M){
m = M;
Nstates = pow(2, M - 1);
for (int i = 0; i < Nstates; i++){
StateTransition[i] = i;
}
}
int main(({
Trellis Tu = Trellis(3);
返回0;}
我得到的错误是运行时检查失败#2围绕变量"Tu"的堆栈已损坏;
您没有为StateTransition
分配任何内存,您想要的是:
StateTransition = new int[Nstates];
在ctor中的for
循环之前。
灵活的数组成员是C99的一项功能,它允许您执行类似的操作
struct header {
size_t len;
unsigned char data[];
};
并且,只要有适当的内存布局,就可以访问和写入data
阵列。
在您的情况下,您没有为StateTransition
变量提供任何内存,从而覆盖了其他一些堆栈数据。
你最好做一些类似的事情
class Trellis
{
private:
int m;
int Nstates;
int *StateTransition; // Pointer
public:
Trellis();
Trellis(int M);
~Trellis();
};
Trellis::Trellis() : StateTransition(0) {
}
Trellis::Trellis(int M) : StateTransition(0)
{
m = M;
Nstates = pow(2, M - 1);
StateTransition = new int[Nstates]; // Allocate memory
for (int i = 0; i < Nstates; i++)
{
StateTransition[i] = i;
}
}
Trellis::~Trellis() {
if(StateTransition != 0)
delete[] StateTransition; // Always be a good citizen
}
至于三规则,您可能还想编写一个复制构造函数。