2013-04-20 230 views
-2

我將創建的表傳遞給fillMatrix函數時遇到問題。 另一件事是如何在我的函數中引用此表。我非常感謝各種幫助。我沒有遇到任何控制檯問題。程序正在凍結。將二維數組傳遞到函數

int **createTable(int n) 
{ 
    int **table = new int*[n]; 
    for(int i = 0; i<n; i++) 
    { 
     table[i] = new int[n]; 
    } 
    return table; 
} 

void fillMatrix(int n, int **tab) 
{ 
    for(int x = 0; x<=n; x++) 
    { 
     for(int y= 0; y<=n; y++) 
     { 
      tab[x][y] = 0; 
     } 
    } 
} 


int main() 
{ 
    int n; 
    cout <<"Add size of table"; 
    cin >> n; 
    int **table = createTable(n); 

    srand(time(NULL)); 

    fillMatrix(n, table); 


    return 0; 
} 
+3

你不告訴我們你有什麼樣的問題。你期望會發生什麼?究竟發生了什麼?你有編譯器錯誤嗎?哪一個? – sth 2013-04-20 13:38:30

+0

你應該釋放'table'指向的內存。 – 0x499602D2 2013-04-20 13:40:25

+0

我沒有得到任何控制檯問題。程序正在凍結。 – mkkrolik 2013-04-20 13:43:11

回答

7

我看到你的代碼只有一個問題:

for(int x = 1; x <= n; x++) 
{ 
    for(int y = 1; y <= n; y++) 
    { 
     tab[x][y] = 0; 
    } 
} 

數組在C++中是從零開始的,但你想分配tab[n][n]導致未定義行爲

此外,您應該delete陣列一旦不再需要。


作爲另一種解決辦法,我建議你使用std::vector代替動態分配數組。

+0

這樣一個愚蠢的錯誤,我不應該複製和粘貼我的代碼:D謝謝你解決問題。 – mkkrolik 2013-04-20 13:53:27

+0

@ user1769428,如果對你有幫助,請不要忘記接受答案。 – soon 2013-04-20 14:10:17

0

這是他們告訴你的。您的發言應該是這樣,而不是這個

for(int i = 0 ; i < n ; i++) 

for(int i = 0 ; i <= n ; i++) 

編譯器要警告你,如果你不小心超越數組這就是爲什麼你沒有任何警告或錯誤的大小。

考慮使用矢量而不是上面建議的數組。