2013-10-04 109 views
0

爲什麼我的C++代碼觸發堆棧溢出?爲什麼這個C++代碼觸發堆棧溢出?

#include "stdafx.h" 
#include <iostream> 

using namespace std; 

int _tmain(int argc, _TCHAR* argv[]) 
{  
    cout<<"Enter an odd number for the order of magic square: "; 
    cin>>num; 

    int sqr[5][5]; 

    for (int i=0; i<num; i++) 
     for (int j=0;j<num; j++) 
      sqr [i][j]=0; 

    return 0; 

}

+2

凡'num'聲明? –

+1

如果您輸入的值大於5,則會發生這種情況。 – Arun

+0

@Arun:我認爲如果你輸入一個非整數也可能發生。 –

回答

0

你最好使用vector<vector<int> >,其大小是動態增加,

或更改你的代碼

for (int i=0; i<num &&i < 5; i++) 
    for (int j=0;j<num && j < 5; j++) 
     sqr [i][j]=0; 

因爲你的SQR的聲明sqr[5][5]

+0

不起作用。它甚至不會讓我輸入任何數字 – user2844883

+0

你想輸入的數字 –

1
int sqr[5][5]; 

您定義sqr爲雙維數組,col and row都5.有效col/row[0..4]之間,你需要確保num < 5 && num > 0

0

可能應該存在: INT NUM; 或num可能會變成一個很大的數字,由一個字符串產生。 增加: 的printf( 「%d」,NUM); 測試,看它是否比4

0

你想創建一個基於輸入「N」一個n×n矩陣更大?

如果是這樣,你不應該靜態分配矩陣(見爲什麼其他的答案)。 斷言「n」不是數字。

要創建矩陣:

int **sqr = new int*[n]; 
for (int i = 0; i < n; i++) 
    sqr[i] = new int[n]; 

這將創建您創建的訂單N×N的的二維矩陣。 索引到它,你可以使用SQR [行] [COL] (記住:x表示列,y表示行,不要忘記刪除所有該內存!)

如果你想使用STL ,那麼你可以使用創建一個矢量矢量而不用做所有這些C風格的指針!