我有以下方法:

 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/

10-09 13:26