我有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];
}
}
}
}
}
}`
答案 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
你实际上是指其他矩阵变量之一(即altkare2
或matris
)
答案 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
没有效果,但在这一个中,两个条件(用逗号分隔)是等效的,所以幸运的是它不会导致错误。