C에서 배열을 동적으로 초기화 할 때마다 항상 SIGSEGV 오류가 발생합니다. 왜 내가 항상 잘못된 작업을하고 있는지 말해주십시오.SIGSEGV in C 오류
코드는 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 아, 미안. 알았어. Lemme가 다시 컴파일합니다. –
네,'n'의 값이 * 불확정 * 일때 (mandom) * malloc에 대한 호출에서 어떻게 생각하십니까? –