c – ***堆栈粉碎检测***:高斯消除

c – ***堆栈粉碎检测***:高斯消除,第1张

概述我正在用C语言编写代码,用于教学语言的高斯消除.编译时没有错误,但是在执行程序时出现堆栈碎片错误. 这是我写的: #include <iostream>#include <stdlib.h>#include <math.h>using namespace std;int main(){ int i,j,l,n; double *c; int *indice; 我正在用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 } };
总结

以上是内存溢出为你收集整理的c – ***堆栈粉碎检测***:高斯消除全部内容,希望文章能够帮你解决c – ***堆栈粉碎检测***:高斯消除所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1217887.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存