2015-10-16 53 views
-3

我寫了一個C++代碼,並且面對兩個不同的編譯器(Visual C++和g ++)編譯下面的代碼,它們爲H[][]矩陣創建不同的輸出。爲什麼Visual C++和g ++爲我的程序提供不同的輸出?

VC++的結果是正確的,並且由g ++產生的H矩陣的結果是錯誤的。我在cygwin中使用g++ -O -o output myfile.cpp

我檢查了我的代碼行,但我找不到理由。第二,當我爲xt數組(例如30)分配一個大數字時,我的代碼遇到一個錯誤。

+1

爲他們分配內存,你可能會有一個bug。請發佈[mcve]。 –

回答

7

全局變量:

int n, m, beta; 

初始化爲零。然後,您可以使用它們的值分配內存:

char *t = new char[n]; 
char *x = new char[m]; 

後來你讀nm但假設tx可以像它們的大小對應的nm新的值進行訪問。你很可能最終會超出範圍訪問內存。

這是未定義的行爲。

你需要的是初始化txnullptrmain

char *t = nullptr; 
char *x = nullptr; 

int main() 
{ 
    cout << "Enter n (size of t);" << endl; 
    cin >> n; 

    cout << "Enter m (size of x):" << endl; 
    cin >> m; 

    // Allocate memory for t and x. 
    t = new char[n]; 
    x = new char[m]; 
+1

同樣適用於G和H. – drescherjm

+0

tnx R Sahu.You解決了我的第一個問題,VC++和g ++都創建了相同的輸出。但是,當我給t和x分配一個大值(例如50)時,VC++會報告一些異常,如「訪問衝突讀取位置...」,並且無法創建exe文件。和g ++創建輸出,但給出以下例外: – alijanavar

+0

tnx R Sahu.You解決了我的第一個問題,VC++和g ++都創建了相同的輸出。但是,當我給t和x分配一個大值(例如50)時,VC++會報告一些異常,如「訪問衝突讀取位置...」,並且無法創建exe文件。和g ++創建輸出,但會產生以下異常:「cygwin_exception :: open_stackdumpfile:將堆棧跟蹤轉儲到output.exe.stackdump – alijanavar

相關問題