お願いします。
#include<stdio.h>
#include<math.h>
#define nmax 50
#define n 1000
#define nout 5
#define m 20
#define dfcoef 0.1
int main(void)
{
int i,j,k,r,dt,dx,it;
double a[nmax][nmax*2], b[nmax][nmax],tb[nmax][nmax];
FILE *fq;
fq=fopen("kadai4.csv","w");
for(i=0;i<m-1;i++){ //初期値を設定
a[i][m-1]=1.0;
}
for(it=0;it<=n;it++){ //時間増分するループ
dt=1./(double)n;
dx=1./(double)m;
r=dt/(dx*dx);
for(i=0;i<m-1;i++){ //係数行列の設定
a[i][i]=1+2*r;
}
for(i=0;i<m-2;i++){
a[i][i+1]=-r;
}
for(i=0;i<m-2;i++){
a[i+1][i]=-r;
}
for(i=0;i<m-3;i++){
for(j=i+2;j<m-1;i++){
a[i][j]=0.0;
}
}
for(i=0;i<m-3;i++){
for(j=i+2;j<m-1;i++){
a[j][i]=0.0;
}
}
hakidashi(m, a, b); //関数の呼び出し
tb[0][0]=0.0; //tbを設定
tb[m][0]=0.0;
for(i=0;i<m-1;i++){
tb[i+1][0]=b[i][0];
}
for(i=0;i<m+1;i++){
fprintf(fq,"%f\t",tb[i][0]);
}
fprintf(fq,"\n");
for(i=0;i<m-1;i++){ //時間を進める
a[i][m-1]=tb[i+1][0];
}
}
fclose(fq);
return(0);
}
int hakidashi(double a[][nmax*2],double b[][nmax])
{
int i, j, k, ip, jp;
double coe, temp;
for(ip=0;ip<m-1;ip++){
jp=0;
coe=a[ip][jp];
for(j=1;j<m-1;j++){ //枢軸を設定
if(fabs(coe)<fabs(a[ip][j])){
coe=a[ip][j];
jp=j;
}
}
for(j=0;j<m;j++){ //各列を枢軸で割る
a[ip][j]=a[ip][j]/coe;
}
for(i=0;i<m-1;i++){
coe=a[i][jp];
for(j=0;j<m;j++){ //枢軸以外の各列の要素を0にする
if(i==ip)continue;
a[i][j]=a[i][j]-a[ip][j]*coe;
}
}
}
for(j=0;j<m-1;j++){ //単位行列にする
for(i=0;i<m-1;i++){
if(a[i][j]==1.0){
for(k=0;k<m;k++){
temp=a[j][k];
a[j][k]=a[i][k];
a[i][k]=temp;
}
}
}
}
for(i=0;i<m-1;i++){ //解行列を作成
b[i][0]=a[i][m-1];
}
}
このプログラムを実行するとプログラムを終了しますとでるのですがなぜなのか教えてください。