簡體   English   中英

變量周圍的堆棧損壞錯誤

[英]Stack around variable is corrupted error

我正在寫下面的代碼,並且我在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需要類似以下內容:

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
}

至於三個規則 ,您可能還想編寫一個副本構造函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM