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