2013-05-29 39 views
0

我想寫一個帶有動態矩陣的小程序(我用C開始了它,但現在我發現我需要用C++來完成它)。它的主要部分是這樣的:在c/C++中的動態矩陣 - 奇怪的錯誤

int main() 
{ 
    int n,m,i,j,k; 
    printf("Matrix A n x m:\n"); 
    printf("Input n: "); 
    scanf("%d",&n); 
    printf("Input m: "); 
    scanf("%d",&m); 
    int** matrix = new int*[m]; 

    if (matrix == NULL) { 
     printf("no memory\n"); 
     system("pause"); 
     exit(1); 
    } 

    for(k=0; k<m; ++k) 
    { 
     matrix[k]=new int[n]; 

     if(matrix[k]==NULL) 
     { 
     printf("error"); 
     }  
    }  

    j=0; 

    do 
    { 
     i=0; 
     do 
     { 
      printf("input (%d,%d):", i,j); 
      scanf("%d", &matrix[i][j]); 
      i++; 
     } 
     while (i<n); 
    j++; 
    }  
    while (j<m); 
} 

它編譯沒有錯誤,但它不能正常工作。例如,我可以創建2x4矩陣,但不能創建4x2。輸入(3,0)消息出現後,程序崩潰。爲什麼?

+0

有你試圖使用一些調試器? –

+0

C++版本簡而言之:不要使用指針,請使用''。 – chris

+0

@chris是什麼讓你覺得'printf' /'scanf'是他問題的任何部分? –

回答

1

你i和j之間的混合,你應該做的scanf("%d", &matrix[j][i]);

+0

謝謝!它現在似乎在工作。 – user19502

1

你的i和j值是南轅北轍。 j從0..m-1開始,我從0..n-1開始。您的輸入應該在&矩陣[j] [i]之前。要麼或改變我回到我<米和j < n。

0

據我所知,一個數組必須至少有1個元素,如果你正在嚴格的ANSI模式編譯。

int m[];   /*ILLEGAL*/ 
int m[0];  /* definition of 0 size -- ILLEGAL */ 

請糾正我,如果我不正確

您必須聲明數組元素有(至少)一個元素,如果你是在嚴格的ANSI模式下編譯

親切的問候

+0

正確,你是不正確的。 –

+0

'int m [0];'是合法的,無論如何它與這個問題有什麼關係? –

+0

嗯,http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devwin32/errarray0len_xml.html –