C言語の配列を動的に初期化するときはいつも、常にSIGSEGVエラーが発生します。私はいつも間違っていますか教えてください。CエラーのSIGSEGV
コードはTurboC上で正常に動作しますが、GCCを使用するオンラインジャッジでSIGSEGVを提供します。
マイコード:スタートのために
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
long n,h,i,crane=0,box=0,temp=0;
long *comm;
scanf("%ld %ld",&n,&h);
long *a = (long*)malloc(n*sizeof(long));
for(i=0;i<n;i++)
scanf("%ld",&a[i]);
scanf("%ld",&comm[0]);
i=0;
while(comm[i]!=0)
{
i++;
scanf("%ld",&comm[i]);
}
for(i=0;comm[i]!=0;i++)
{
if(comm[i]==3)
box=1;
if(comm[i]==4 && box==1)
{
a[crane]=(a[crane]+1);
temp=0;
}
if(box==1 && (comm[i]==1 || comm[i]==2) && temp==0)
{
a[crane]=(a[crane]-1);
temp=1;
}
if(crane!=0 && comm[i]==1)
crane--;
if(comm[i]==2)
crane++;
if(comm[i]==0)
break;
}
for(i=0;i<n;i++)
printf("%ld ",a[i]);
free(a);
free(comm);
return 0;
}
プログラムの実行は上から下に行くことを覚えておいてください。変数を初期化する前に変数 'n'を使用することを考えてみましょう。 –
@Someprogrammerdudeああ申し訳ありませんが、私はそれを持っています。それをもう一度コンパイルしてください。 –
これは、 'n'の値が*不確定*(そして一見無作為)であるときに、' malloc 'の呼び出しで何が起こると思いますか? –