我正在编写以下代码,我收到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 - 围绕varuble'Tu'的堆栈已损坏;
答案 0 :(得分:4)
您没有为StateTransition
分配任何内存,您需要以下内容:
StateTransition = new int[Nstates];
在你的for
循环之前。
答案 1 :(得分:0)
Flexible array members是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
}
至于rule of three,您可能还想编写一个复制构造函数。