如何解决此错误:.exe文件已停止工作

时间:2015-11-07 01:19:42

标签: c++ matrix

我有2x2矩阵。我想检查这个矩阵是否对称。当我将此函数添加到我的代码中时,我正在

  

.exe文件已停止工作错误。

我该如何解决这个问题?有人能帮助我吗?

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];

                    }
                }

            }

        }
    }

}`

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

我可以在代码中看到两个明显的问题,不确定他们是否修复了所有内容,但肯定会修复它们:

1)

  

square2by2 = new int * [4];

这里你刚刚创建了一个包含4个指针的数组,而不是4个整数的数组。而且我没有看到你在这个数组中放置任何东西的任何地方,所以它的内容是随机的,稍后你会像这样引用它:

  

cout&lt;&lt; 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无效。我很确定这不是你想要的,而是像&amp;&amp ;;或||,这两个条件的某种组合。

同样适用于另一个:

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

在这里,j<2没有效果,但在这一个中,两个条件(用逗号分隔)是等效的,所以幸运的是它不会导致错误。