【发布时间】:2012-09-24 21:35:36
【问题描述】:
发生错误后,我自然会调用perror()。但是当我这样做时遇到了分段错误,或者printf("error: %s\n", strerror(errno)); 我不知道发生了什么。
int fd;
if((fd = open(FILENAME, O_RDONLY)) == -1) {
perror("fbi");
exit(1);
}
for(;;) {
readed = read(fd, buffer, BUFSIZE);
if(readed == 0)
break;
if(readed == -1) {
perror("fbi"); // <- here's the error
exit(1);
}
如何解决这个问题?
更新:
printf("%d\n", errno); // given 9
更新 2:
看起来与recv() 函数中传递的缓冲区大小有关。如果BUFSIZE 是1,则给出上述错误。但是如果BUFSIZE 是例如128 没有错误。有人可以解释这种行为吗?
【问题讨论】:
-
您是否尝试过使用 gdb 之类的调试器?调用堆栈是什么?
-
听起来可能是(1)您的堆栈空间不足或(2)您超出了堆栈上的缓冲区并写入了返回地址(尽管这第二个可能需要一些时髦的其他线程之类的东西)
-
@AdamRosenfield:通过使用gdb我发现错误来自
getenv()函数:0xb7e84011 in getenv () from /lib/libc.so.6 -
确保将有效的 C 字符串传递给 getenv()。
-
我没有调用 getenv()。 perror() 调用它