【发布时间】:2011-10-29 16:18:40
【问题描述】:
以下哪一项更可取
file=fopen(argv[1],"r");
arr=(unsigned int *)malloc(4);
while(!feof(file))
{
++arr_size;
arr=(unsigned int *)realloc(arr,arr_size*sizeof(unsigned int)
fscanf(file,"%u\n",&arr[arr_size-1]);
}
fclose(file);
或者这个
arr=(unsigned int *)malloc(some_size*sizeof(unsigned int));
file=fopen(argv[1],"r");
arr=(unsigned int *)malloc(4);
while(!feof(file))
{
++arr_size;
fscanf(file,"%u\n",&arr[arr_size-1]);
}
fclose(file);
【问题讨论】:
-
第二个有内存泄漏?您重新分配分配的空间而不释放它,甚至不使用第一行?
-
对于
realloc,您还必须小心,如果出现错误并返回 null,那么您会按照您编写的方式丢失原始指针。 -
第二个也有大量缓冲区溢出,假设输入文件长度超过 4 个字节。
-
应该删除第二个示例中的
arr=(unsigned int *)malloc(4);。 -
在 C 中,最好不要从
malloc或realloc转换返回值:c-faq.com/malloc/mallocnocast.html
标签: c memory dynamic allocation realloc