我寫了一個C++代碼,並且面對兩個不同的編譯器(Visual C++和g ++)編譯下面的代碼,它們爲H[][]
矩陣創建不同的輸出。爲什麼Visual C++和g ++爲我的程序提供不同的輸出?
VC++的結果是正確的,並且由g ++產生的H矩陣的結果是錯誤的。我在cygwin中使用g++ -O -o output myfile.cpp
。
我檢查了我的代碼行,但我找不到理由。第二,當我爲x
和t
數組(例如30)分配一個大數字時,我的代碼遇到一個錯誤。
我寫了一個C++代碼,並且面對兩個不同的編譯器(Visual C++和g ++)編譯下面的代碼,它們爲H[][]
矩陣創建不同的輸出。爲什麼Visual C++和g ++爲我的程序提供不同的輸出?
VC++的結果是正確的,並且由g ++產生的H矩陣的結果是錯誤的。我在cygwin中使用g++ -O -o output myfile.cpp
。
我檢查了我的代碼行,但我找不到理由。第二,當我爲x
和t
數組(例如30)分配一個大數字時,我的代碼遇到一個錯誤。
全局變量:
int n, m, beta;
初始化爲零。然後,您可以使用它們的值分配內存:
char *t = new char[n];
char *x = new char[m];
後來你讀n
和m
但假設t
和x
可以像它們的大小對應的n
和m
新的值進行訪問。你很可能最終會超出範圍訪問內存。
這是未定義的行爲。
你需要的是初始化t
和x
到nullptr
和main
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];
同樣適用於G和H. – drescherjm
tnx R Sahu.You解決了我的第一個問題,VC++和g ++都創建了相同的輸出。但是,當我給t和x分配一個大值(例如50)時,VC++會報告一些異常,如「訪問衝突讀取位置...」,並且無法創建exe文件。和g ++創建輸出,但給出以下例外: – alijanavar
tnx R Sahu.You解決了我的第一個問題,VC++和g ++都創建了相同的輸出。但是,當我給t和x分配一個大值(例如50)時,VC++會報告一些異常,如「訪問衝突讀取位置...」,並且無法創建exe文件。和g ++創建輸出,但會產生以下異常:「cygwin_exception :: open_stackdumpfile:將堆棧跟蹤轉儲到output.exe.stackdump – alijanavar
爲他們分配內存,你可能會有一個bug。請發佈[mcve]。 –