首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >堆栈周围的变量是损坏的错误

堆栈周围的变量是损坏的错误
EN

Stack Overflow用户
提问于 2014-07-15 13:45:06
回答 2查看 419关注 0票数 0

我正在编写以下代码,并得到了Stack around variable is corrupted错误。我检查过类似的帖子,但没有把问题联系起来。我对C++也相当陌生。这是我的密码。

代码语言:javascript
复制
///CLASS DEFINITION
class Trellis{

    private:
        int m;
        int Nstates;
        int StateTransition[];

    public:
        Trellis(); 
        Trellis(int M);
};

以下是方法的定义

代码语言:javascript
复制
Trellis::Trellis(int M){
    m = M;
    Nstates = pow(2, M - 1);

    for (int i = 0; i < Nstates; i++){
        StateTransition[i] = i;
    }
}

int main() {

代码语言:javascript
复制
Trellis Tu = Trellis(3);

返回0;}

我得到的错误是运行时检查失败#2-堆周围的变量'Tu‘已损坏;

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-15 13:59:50

柔性数组成员是一个C99特性,它允许您执行以下操作

代码语言:javascript
复制
struct header {
    size_t len;
    unsigned char data[];
};

而且,只要有适当的内存布局,就可以访问和写入data数组。

在您的示例中,您没有为您的StateTransition变量提供任何内存,从而覆盖了一些其他堆栈数据。

你最好做这样的事

代码语言:javascript
复制
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
}

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

票数 0
EN

Stack Overflow用户

发布于 2014-07-15 13:47:48

您没有为StateTransition分配任何内存,您需要的内容如下:

代码语言:javascript
复制
StateTransition = new int[Nstates];

在ctor中的for循环之前。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24759937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档