【发布时间】:2015-01-30 10:03:26
【问题描述】:
int* data=(int*)malloc(size*sizeof(int));
int i=0,tmp;
while(fscanf(m,"%d",&tmp)!=EOF)data[i++]=tmp;
为什么它起作用而不是这个? :
int* data=(int*)malloc(size*sizeof(int));
int i=0;
while(fscanf(m,"%d",data[i++])!=EOF);
【问题讨论】:
-
您的 while 循环条件不正确。如果
fscanf失败(返回0),则data[i]将保持未分配状态。 -
因为您没有阅读您使用的语言功能的文档。
-
除其他外,如答案中所示...始终检查 malloc (!=NULL) 的返回值以确保操作成功。在 C 语言中,从 malloc(和系列)转换返回值是一个坏主意(可能导致细微的程序错误)。注意: malloc 的返回值是 (void *) 所以它会自动变成正确的类型,(没有任何转换)