正好在学习指针与内存,看到了各位的解答深受启发,不过有点小疑问,某些教程说不应对上述例子中的tmp做出修改,因为其已被系统回收,包括free()也是不可以的,比如tmp99=realloc(tmp,99*sizeof(int));
free(tmp);
这是错误的,请问这有什么道理吗?
还有,下附我的某个无法运行的奇怪程序(总体思路,动态扩充数组),恳请各位大佬不吝赐教,感谢!
[C] 纯文本查看 复制代码 #include <stdio.h>
#include <stdlib.h>
#define int_space sizeof(int)
int main (void) {
int num;
int count =0;
int *p= (int*)calloc(1,int_space);
scanf("%d",&num);
while(num!=0) {
p[count] = num;
printf("n=%d,p[%d]=%d\n",sizeof(p)/int_space,count,num);
int *temp_p=(int *)realloc(p,(count+2)*int_space);
p=NULL;
if(temp_p!=NULL) {
printf("Success\n");
++count;
//free(p);
p=temp_p;
temp_p=NULL;
scanf("%d",&num);
printf("%llu\n",sizeof(p)/int_space);
}
else {
printf("Error!");
}
}
/*
for(unsigned long long int i=0;i<=(sizeof(*p)/sizeof(int));i++){
printf("%d",p[i]);
}*/
return 0;
} |