C++ 变量周围的堆栈已损坏错误

C++ 变量周围的堆栈已损坏错误,c++,C++,我正在写下面的代码,我发现堆栈周围的变量已损坏错误。我查看过类似的帖子,但无法将问题联系起来。我对C++也比较陌生。这是我的密码 ///CLASS DEFINITION class Trellis{ private: int m; int Nstates; int StateTransition[]; public: Trellis(); Trellis(int M); }; 这里是方法的定义

我正在写下面的代码,我发现
堆栈周围的变量已损坏
错误。我查看过类似的帖子,但无法将问题联系起来。我对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;
    }
}
返回0; }


我得到的错误是运行时检查失败#变量“Tu”周围的两个堆栈已损坏

您没有为
状态转换分配任何内存,您需要类似以下内容:

StateTransition = new int[Nstates];

在ctor中的
for
循环之前。

您没有为
状态转换分配任何内存,您需要如下内容:

StateTransition = new int[Nstates];
在ctor中的
for
循环之前。

是一个C99功能,它允许您执行以下操作

struct header {
    size_t len;
    unsigned char data[];
};
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
}
而且,如果您有适当的内存布局,您可以访问
数据
数组并对其进行写入

在您的情况下,您没有为
statetransformation
变量提供任何内存,因此会覆盖一些其他堆栈数据

你最好像这样做

struct header {
    size_t len;
    unsigned char data[];
};
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
}
类网格
{
私人:
int m;
内部状态;
int*stateTransformation;//指针
公众:
网格();
网格(intm);
~Trellis();
};
网格::网格():状态转换(0){
}
网格::网格(int M):状态转换(0)
{
m=m;
Nstates=pow(2,M-1);
stateTransformation=newint[Nstates];//分配内存
对于(int i=0;i
至于,您可能还想编写一个复制构造函数。

是C99的一个特性,它允许您执行以下操作

struct header {
    size_t len;
    unsigned char data[];
};
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
}
而且,如果您有适当的内存布局,您可以访问
数据
数组并对其进行写入

在您的情况下,您没有为
statetransformation
变量提供任何内存,因此会覆盖一些其他堆栈数据

你最好像这样做

struct header {
    size_t len;
    unsigned char data[];
};
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
}
类网格
{
私人:
int m;
内部状态;
int*stateTransformation;//指针
公众:
网格();
网格(intm);
~Trellis();
};
网格::网格():状态转换(0){
}
网格::网格(int M):状态转换(0)
{
m=m;
Nstates=pow(2,M-1);
stateTransformation=newint[Nstates];//分配内存
对于(int i=0;i

至于,您可能还需要编写一个副本构造函数。

StateTransformation看起来不正确…您应该用消息提供整个错误。StateTransformation看起来不正确…您应该用消息提供整个错误。@user63050在进行更改后是否收到其他错误消息?请在你的问题帖子中提供完整的错误信息。我更新了帖子。我收到的新错误是错误C2440:“=”:无法从“int*”转换为“int[]”@user63050数组可能会衰减为指针,但在这种情况下不会,请使用int*@user63050进行更改后是否收到其他错误消息?请在你的问题帖子中提供完整的错误信息。我更新了帖子。我收到的新错误是错误C2440:“=”:无法从“int*”转换为“int[]”@user63050数组可能会衰减为指针,但在这种情况下不会,请使用int*非常感谢。非常感谢你。U规则