c - 运行时检查失败 #2-变量 x2 周围的堆栈已损坏

标签 c variables stack runtime

我编写了这个程序来使用克拉默法则计算 3X3 线性方程组的解。该程序可以运行并输出正确的结果,但在它正常结束之前会提示一条错误消息“运行时检查失败#2-变量 x2 周围的堆栈已损坏”并且程序无法正确终止。这是代码:

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

void cramer (double** a, double* b);

int main()
{
    int i,j;
    double** a;
    double* b;
    a=(double**)malloc(3*sizeof(double*));
    for (i=0;i<3;i++)
        a[i]=(double*)malloc(3*sizeof(double));
    b=(double*)malloc(3*sizeof(double));
printf ("This program computes the solutions of a system of linear equations 3X3\n");
printf ("a11x1+a12x2a13x3=b1\n");
printf ("a21x2+a22x2+a23x3=b2\n");
printf ("a31x3+a32x2+a33x3=b3\n");
printf ("Insert a and b\n");
for (i=0;i<3;i++){
    for (j=0;j<3;j++){
    printf("a%d%d\n",i+1,j+1);
    scanf("%lf",&a[i][j]);
    }
    printf("b%d\n",i+1);
    scanf("%lf",&b[i]);
}
cramer(a,b);
for (i=0;i<3;i++)
    free(a[i]);
free(a);
free(b);
return 0;
}

void cramer(double** a,double* b)
{
int i,j;
double x1[3][3],x2[3][3],x3[3][3],A[3][3];
for (i=0;i<3;i++){
    for (j=0;j<3;j++){
    A[i][j]=a[j][i];
    x1[i][j]=a[i][j]*A[i][j];
    x2[i][j]=a[i][j]*A[i][j];
    x3[i][j]=a[i][j]*A[i][j];
    }
    x1[i][1]=b[i];
    x2[i][2]=b[i];
    x3[i][3]=b[i];
}
    printf("   %f %f %f\n",x1[0][0],x1[0][1],x1[0][2]);
    printf("x1=%f %f %f\n",x1[1][0],x1[1][1],x1[1][2]);
    printf("   %f %f %f\n",x1[2][0],x1[2][1],x1[2][2]);
    printf("\n");
    printf("   %f %f %f\n",x2[0][0],x2[0][1],x2[0][2]);
    printf("x2=%f %f %f\n",x2[1][0],x2[1][1],x2[1][2]);
    printf("   %f %f %f\n",x2[2][0],x2[2][1],x2[2][2]);
    printf("\n");
    printf("   %f %f %f\n",x3[0][0],x3[0][1],x3[0][2]);
    printf("x3=%f %f %f\n",x3[1][0],x3[1][1],x3[1][2]);
    printf("   %f %f %f\n",x3[2][0],x3[2][1],x3[2][2]);
}

最佳答案

x1[i][1]=b[i];
x2[i][2]=b[i];
x3[i][3]=b[i];   // index is out of range

可能这就是你的意思:

x1[i][0]=b[i];
x2[i][1]=b[i];
x3[i][2]=b[i];

关于c - 运行时检查失败 #2-变量 x2 周围的堆栈已损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25834281/

相关文章:

c - 如何检测xlib应用程序是否从xinit运行?

c - 为用户空间线程库编写调度程序

javascript - 不能在 fetch api 中使用变量

C - 指向 int 的指针以获取堆栈中的元素

c - 这段代码中的递归是如何工作的?

linux - 为什么 `pop` 指令不从堆栈中弹出?

c - 检查泛型数组是否为 MaxHeap 的算法

c++ - 由于为 C++ 程序调用 ulldiv.asm 而导致编译器引用错误

java - 我如何访问多个变量作为一个整体或剩余? ( java )

sql - PostgreSQL 声明具有显式数据类型的变量