2015-11-07 114 views
0

我有2x2矩陣。我想檢查這個矩陣是否對稱。當我加入這個功能,我的代碼,我得到如何解決此錯誤:.exe文件已停止工作

.exe file has stopped working error.

我怎樣才能解決這個問題呢?有人能幫我嗎?

void Array::symetrical_square_control() 
{ 
     square2by2=new int*[4]; 
     int var2=0, var=0,i,k,l,j; 

    for(i=0, l=var2 ;i<2 , l<var2+rowsize ;i++,l++) 
    { 
     for(j=0 , k=var ; j<2, k<var+2 ;j++,k++) 
     { 
      altkare2[i][j]=matris[l][k]; 
     } 

     if(i==1) 
     { 
      var++; 
      if(var==rowsize-1) 
      { 
       cout<<endl; 
       for(int x=0;x<2;x++) 
       { 
        cout<<endl; 
        for(int y=0;y<2;y++) 
        { 
         cout<<square2by2[x][y]; 

        } 
       } 
       var = 0; 
       i-=2; 
       l-=1; 
       if(l==rowsize+1) 
       { 
        break; 
       } 
      } 
      else 
      { 
       i-=2; 
       l-=2; 
       cout<<endl; 
       for(int x=0;x<2;x++) 
       { 
        cout<<endl; 
        for(int y=0;y<2;y++) 
        { 
         cout<<square2by2[x][y]; 

        } 
       } 

      } 

     } 
    } 

}` 

回答

1

你從來沒有創建陣列square2by2。他們需要分別使用new來初始化。當您執行cout<<square2by2[x][y];時,程序無法引用有效的內存地址,因此會出現分段錯誤/訪問衝突。

編輯:初始化square2by2

square2by2 = new int* [2]; 
square2by2[0] = new int[2]; 
square2by2[1] = new int[2]; 

不過,我沒有看到你square2by2做什麼 - 你打印出它的價值沒有首先將它們設置爲東西。我通過square2by2假設你實際上意味着其他矩陣變量之一(即altkare2matris

+0

非常感謝。有效。 – user5535577

+0

@ user5535577不錯。樂意效勞。 – 2015-11-07 01:58:37

1

我可以看到在代碼中兩個明顯的問題,不知道他們解決一切,但他們無疑應該是固定的:

1)

square2by2=new int*[4];

在這裏,您剛剛創建的4個指針,而不是4個整數數組的數組。我沒有看到任何地方,你把任何東西在這個數組中,因此它的內容是隨機的,後來,你像這樣引用它:

cout << square2by2[x][y];

等效於cout << *(square2by2[x] + y),與square2by2[x]是一個未初始化的指針,一個隨機的位置,導致崩潰。

2)

for(i=0, l=var2 ; i<2 , l<var2+rowsize ;i++,l++) 

這裏的停止條件是l<var2+rowsize,第一條件i<2沒有效果。我非常肯定這不是你想要的,但像& &或||,這兩個條件的一些組合。

同樣適用於其他爲:

for(j=0 , k=var ; j<2, k<var+2 ;j++,k++) 

同樣在這裏,j<2有沒有影響,但在這其中它發生的兩個條件(以逗號分隔)是等價的,所以幸運的是,它不會導致到一個錯誤。