所以我有一段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;

}
现在重点是当计数器到达循环的末尾时,使数组大小加倍。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;
}

最佳答案

您只能对通过调用realloc/malloc/calloc获得的指针使用realloc。你的代码不会这么做,所以它被破坏了。
可能是这样的:

char * niz = malloc(n);

// ...

char * tmp = realloc(niz, n * 2);

if (tmp) { niz = tmp; }
else     { /* flagrant error */ }

// ...

free(niz);

07-27 13:20