运行我的程序时出现了分段错误,并且出现了奇怪的结果。我已经投入了大量的调试代码来准确找到奇怪的行为。SIGSEGV,使用数组的分段错误
int det_2b2(int d[2][2])
{
cout<<d[1][1]<<","<<d[1][2]<<endl;
cout<<d[2][1]<<","<<d[2][2]<<endl;
cout<<(d[1][1]*d[2][2]-d[1][2]*d[2][1])<<endl;
return (d[1][1]*d[2][2]-d[1][2]*d[2][1]);
}
int det_3b3(int d3[3][3])
{
int r1;
int x[2][2];
x[1][1]=d3[2][2];
x[1][2]=d3[2][3];
x[2][1]=d3[3][2];
x[2][2]=d3[3][3];
cout<<"r1.1="<<det_2b2(x)<<endl;
r1=det_2b2(x);
cout<<"r1.2="<<r1<<endl;
x[1][1]=d3[2][1];
x[2][2]=35;
cout<<"r1.3="<<r1<<endl;
x[1][2]=d3[2][3];
cout<<"r1.4="<<r1<<endl;
x[2][1]=d3[3][1];
cout<<"r1.5="<<r1<<endl;
x[2][2]=d3[3][3];
cout<<"r1.6="<<r1<<endl;
int r2=det_2b2(x);
x[1][1]=d3[2][1];
x[1][2]=d3[2][2];
x[2][1]=d3[3][1];
x[2][2]=d3[3][2];
int r3=det_2b2(x);
cout<<r1<<endl;
cout<<d3[1][1]<<endl;
cout<<r1*d3[1][1]<<endl;
cout<<r2*d3[1][2]<<endl;
cout<<r3*d3[1][3]<<endl;
return r1*d3[1][1]-r2*d3[1][2]+r3*d3[1][3];
}
当我设置x的值[2] [2] = 35或x [2] [2] = d [3] [3]它R1的值改变到35或值在d [3] [3]中,所以在封面下肯定有些问题。调用程序为:
#include <iostream>
#include "utilities.h"
using namespace std;
int main()
{
int a[3][3];
a[1][1] = 1;
a[1][2] = 2;
a[1][3] = 3;
a[2][1] = 4;
a[2][2] = 5;
a[2][3] = 6;
a[3][1] = 7;
a[3][2] = 8;
a[3][3] = 9;
cout << "DET a= " << det_3b3(a)<<endl;
return 0;
}
分段错误发生在程序错误发生后的调用程序结束后。
任何想法?
您正在访问界阵列OT。索引'int a [N]'从'a [0]开始,最大的索引是'a [N-1]'。 –
随着想法的发展,也许学习语言(从书中)不会伤害.... –