我正在编写以下代码,并得到了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‘已损坏;
发布于 2014-07-15 13:59:50
柔性数组成员是一个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
}至于三条规则,您可能还需要编写一个复制构造函数。
发布于 2014-07-15 13:47:48
您没有为StateTransition分配任何内存,您需要的内容如下:
StateTransition = new int[Nstates];在ctor中的for循环之前。
https://stackoverflow.com/questions/24759937
复制相似问题