堆栈周围变量已损坏错误



我正在编写以下代码,但收到了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
}

至于三规则,您可能还想编写一个复制构造函数。

相关内容

最新更新