c – ***堆栈粉碎检测***:高斯消除
发布时间:2020-12-16 10:08:15 所属栏目:百科 来源:网络整理
导读:我正在用C语言编写代码,用于教学语言的高斯消除.编译时没有错误,但是在执行程序时出现堆栈碎片错误. 这是我写的: #include iostream#include stdlib.h#include math.husing namespace std;int main(){ int i,j,l,n; double *c; int *indice; double a[2][2]
我正在用C语言编写代码,用于教学语言的高斯消除.编译时没有错误,但是在执行程序时出现堆栈碎片错误.
这是我写的: #include <iostream> #include <stdlib.h> #include <math.h> using namespace std; int main(){ int i,j,l,n; double *c; int *indice; double a[2][2]; n=2; a[1][1]=1; a[1][2]=2; a[2][1]=3; a[2][2]=4; c=new double[n]; indice=new int[n]; /*Inizialize indice*/ for(i=0;i<n;i++){indice[i]=i;} /*find scaling factor*/ for (i=0;i<n;i++){ double c1=0; for (j=0;j<n;j++){ double c0=abs(a[i][j]); if(c0>c1) c1=c0;} c[i]=c1;} /*find pivot*/ int k=0; for(i=0;i<n-1;i++){ double pi1=0; for(j=i;j<n;j++){ double pi0=abs(a[indice[j]][i]); pi0/=c[indice[j]]; if(pi0>pi1){ pi1=pi0; k=j;}} /*interchange rows according to pivoting order*/ int itemp=indice[i]; indice[i]=indice[k]; indice[k]=itemp; for(j=i+1;j<n;j++){ double pj=a[indice[j]][i]/(a[indice[i]][i]); /*recording pivot ratio below diagonal*/ a[indice[j]][i]=pj; /*modify other elements accordingly*/ for(l=i+1;l<n;l++){ a[indice[j]][l]-=pj*a[indice[i]][l];}}} delete c; delete indice; return 0;} 这是什么意思,我的错误在哪里? 解决方法
你在这里有一个错误:
double a[2][2]; a[1][1]=1; a[1][2]=2; a[2][1]=3; a[2][2]=4; 有效数组索引的范围是0..1,但是您正在访问索引2处的元素,该元素超出范围. 你可能想要的是: a[0][0]=1; a[0][1]=2; a[1][0]=3; a[1][1]=4; 或者更简洁: double a[2][2] = { { 1,2 },{ 3,4 } }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |