这是我写的:
#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 } };总结
以上是内存溢出为你收集整理的c – ***堆栈粉碎检测***:高斯消除全部内容,希望文章能够帮你解决c – ***堆栈粉碎检测***:高斯消除所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)