だから私はこのCコードを持っています:
void main (void){
int i,n,r,*pt1;
printf("Enter array size:\n");
scanf("%d",&n);
srand(time(NULL));
char niz[n];
pt1=niz;
for (i=0;i<n;i++){
r=rand() % (15);
printf("%d\n",r);
if (r==0)
break;
niz[i]=r;
if (i==n){
pt1=(char*)realloc(niz,(sizeof(n)*2));
if (pt1==NULL)
printf("Jbg");
}
}
free(pt1);
return 0;
}
ここでのポイントは、カウンターがループの最後に来て、配列サイズを 2 倍にすることです。pt1のコードは大丈夫ですか?また、printf の最後でセグメンテーション違反が発生しますが、その理由がわかりません。前もって感謝します!!:)
編集:皆さんの回答に感謝します。これは私の改訂された機能的なコードです:
void dupla(int n){
int i,r;
srand(time(NULL));
char * niz=malloc(n);
for (i=0;i<n;i++){
r=rand() % (15);
printf("%d\n",r);
if (r==0)
break;
niz[i]=r;
if (i==n){
niz=(char*)realloc(niz,n*2);
}
}
if (niz==NULL)
printf("Jbg");
else
printf("It works\n");
printf("%d",sizeof(niz));
free(niz);
}
void main (void){
int n;
printf("Enter array size:\n");
scanf("%d",&n);
dupla(n);
return 0;
}