[英]Debug error: stack around the variable 'cardDesc' was corrupted
[英]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.