2014-07-15 156 views
0

我正在寫下面的代碼,我得到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主() {

Trellis Tu = Trellis(3); 

返回0的定義; }

我得到的錯誤是運行時檢查失敗#2 - 堆棧周圍var'Tu'被破壞;

+0

StateTransition看起來不正確... –

+1

您應該提供帶有消息的整個錯誤。 –

回答

0

Flexible array members是一個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 
} 

而且作爲rule of three,你可能還需要寫一個拷貝構造函數。

+1

你非常。 U規則 – Boby

4

你不是StateTransition分配任何內存,你想是這樣的:在構造函數你for循環之前

StateTransition = new int[Nstates]; 

+0

謝謝。但我嘗試過,並沒有幫助。 – Boby

+0

這是因爲我在方法內部定義它? – Boby

+0

@ user63050進行更改後是否收到其他錯誤消息?請在您的問題文章中提供完整的錯誤消息。 –