因此,我打开一个文件,到最后看它是多久,然后回到开始导致分段错误(核心转储)。天哪?回卷文件后真的很奇怪的分段错误
...
FILE *passkey;
passkey = fopen("pass.key", "r+");
fseek(passkey, 0, SEEK_END);
filesize = ftell(passkey);
rewind(passkey);
...
回卷导致分段错误。它在开始的时候也是一样的。它为什么这样做?
因此,我打开一个文件,到最后看它是多久,然后回到开始导致分段错误(核心转储)。天哪?回卷文件后真的很奇怪的分段错误
...
FILE *passkey;
passkey = fopen("pass.key", "r+");
fseek(passkey, 0, SEEK_END);
filesize = ftell(passkey);
rewind(passkey);
...
回卷导致分段错误。它在开始的时候也是一样的。它为什么这样做?
C中的fseek函数的seg故障几乎总是由失败的fopen引起的。确保您尝试打开的文件确实存在。如果有一些机会,你依靠r +参数为你创建一个新文件,那么你错了,r + 不会在C中创建一个新文件。尽可能尝试验证fopen的返回值。以防万一你不知道倒带只是一个文件的开始,所以你也可能在那里遇到问题。希望这可以帮助!
快乐编码!
好的。正如评论中所述,我单独检查了所有功能。我知道pass.key存在,我让它存在。我已经完全验证了所有其他线路的工作。 – picklesrevil
这更像是一个扩展的评论,而不是一个正确的答案。下面是你的代码必须样子:
FILE *passkey;
if (!(passkey = fopen("pass.key", "r+")) {
perror("pass.key");
exit(EXIT_FAILURE);
}
if(-1 == fseek(passkey, 0, SEEK_END)) {
perror("pass.key");
exit(EXIT_FAILURE);
}
if(-1 == (filesize = ftell(passkey)) {
perror("pass.key");
exit(EXIT_FAILURE);
}
rewind(passkey);
这很可能是该代码没有得到最后一行。但如果是这样,那么问题一定在其他地方。然后我会推荐使用内存调试器(例如valgrind
或Electric Fence)运行程序。
您**必须**检查您使用的所有四个函数的返回值。他们中的任何一个都可能失败,任何失败都可能导致段错误。 – DyZ
你有没有检查你的pass.key文件是否存在? – soasme
我做到了,一切都有效,直到倒带。我测试了这些返回的所有值,并且在所有这些测试之后放置printf语句来测试所有这些值,这是倒带。 – picklesrevil