【发布时间】:2013-01-12 12:41:17
【问题描述】:
所以我有一段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的结果。 -
char niz[n];— 这不是纯 C。如果n很大,你会遇到麻烦。 -
@Eddy_Em 实际上是合法的 C (但请注意保持小持有)
-
但是这个构造会在栈中分配内存。
realloc分配动态内存。