我有以下方法:
17 //returns size in bytes of binary file stream
18 //leaves the file at original position
19 long getFileSize(FILE * fp)
20 {
21 long pos = -1;
22 fpos_t *curPos;
23 if(fgetpos(fp, curPos) == 0)
24 {
25 fseek(fp, 0L, SEEK_END);
26 pos = ftell(fp);
27 fsetpos(fp, curPos);
28 }
29
30 return pos;
31 }
这将编译和工作,但编译器会给我一个警告,因为curPos不是一个初始化变量。
如果我把那一行改成(编译器建议这样做)
22 fpos_t *curPos = NULL;
我收到一个seg错误。
为什么是这个案子?
最佳答案
您尚未分配curPos
。
所以要么在堆上分配它(以后一定要释放它!)
fpos_t *curPos = malloc(sizeof(fpos_t));
或者在堆栈上
fpos_t curPos;
如果在堆栈上分配它,则需要将引用传递给
fgetpos
:fgetpos(fp, &curPos)
关于c - 为什么此更改会导致段故障?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28308535/