我写了一个C代码来解热方程,但在执行时它说;分段故障(堆芯倾倒)";。有人能帮我吗? #包括 #包括 #定义l10 #定义T 10 #定义Kmax 1000 #定义N 1000 #定义条件0.25 int main(){ int i,j; 浮点数dt,dx,b; 浮点数x[i],t[j],u[i][j];b=2*cond*dt/(dx*dx); 对于(i=1;i

我写了一个C代码来解热方程,但在执行时它说;分段故障(堆芯倾倒)";。有人能帮我吗? #包括 #包括 #定义l10 #定义T 10 #定义Kmax 1000 #定义N 1000 #定义条件0.25 int main(){ int i,j; 浮点数dt,dx,b; 浮点数x[i],t[j],u[i][j];b=2*cond*dt/(dx*dx); 对于(i=1;i,c,C,变量dt和dx未初始化,使用未初始化的变量会导致未定义的行为 您有一个基于变量i和j的VLA,它们也未初始化。 由于i和j是未初始化的,并且您正在使用它们来创建数组,因此i和j的值看起来像是某个休值,没有足够的堆栈内存来分配该数组,您会看到崩溃。是的。甚至还有更多未初始化的变量,甚至包括VLA维度i和j。我想这就是seg错误的来源。@MOehm是的,你是对的,把它添加到了我的回答中哇!这是一些疯狂的缩进风格!请使用所有警告和调试信息(gcc-Wall-Wextra-g)编译,改进你的代码,使其没

变量
dt
dx
未初始化,使用未初始化的变量会导致未定义的行为

您有一个基于变量
i
j
的VLA,它们也未初始化。
由于
i
j
是未初始化的,并且您正在使用它们来创建数组,因此
i
j
的值看起来像是某个休值,没有足够的堆栈内存来分配该数组,您会看到崩溃。

是的。甚至还有更多未初始化的变量,甚至包括VLA维度
i
j
。我想这就是seg错误的来源。@MOehm是的,你是对的,把它添加到了我的回答中哇!这是一些疯狂的缩进风格!请使用所有警告和调试信息(
gcc-Wall-Wextra-g
)编译,改进你的代码,使其没有警告,然后使用调试器(
gdb
);你的“修复我的代码”这个问题在这里是离题的。如果你希望有人阅读这篇文章,你需要修正缩进并采用传统的编码方式。对不起,这篇文章太乱了
#include<stdio.h>

#include<math.h>

#define L 10

#define T 10

#define Kmax 1000

#define N 1000

#define cond 0.25

int main() {    
    int i,j;

    float dt,dx,b;

    float x[i],t[j],u[i][j];        b=2*cond*dt/(dx*dx);    
    for(i=1;i<=N+1;i++)     {       x[i]=i*dx;

        u[i][T]=1;  }   for(j=1;j<=Kmax+1;j++)  {       t[j]=j*dt;

        u[L][j]=0;

        u[N+1][j]=0;

        t[j]=(j)*dt;    }   for(j=1;j<Kmax;j++)         {       for(i=2;i<N;i++)            {

            u[i][j+1]=u[i][j]+0.5*b*(u[i-1][j]+u[i+1][j]-2*u[i][j]);
                        printf("%7.4f\t",u[i][j]);


-----

        printf("\n");       }   } }
b=2*cond*dt/(dx*dx);