我试图理解为什么当我改变缓冲区的大小时这个程序会返回不同的错误:
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
int main()
{
int file = open("./test",O_RDWR);
//char buff[204796] = "" ; -> File Descriptor error (no seg fault)
//char buff[100000]=""; -> Seg Fault
char buff[208896]=""; -> Bad Adress (no seg fault)
int i = 0;
while(read(file,buff+i,2048) > 0)
{
i += 2048;
};
fprintf(stderr, "%s\n", strerror(errno));
}
测试是一个500000 A的文件:)
如果出现错误的地址或文件描述符错误,我不知道如何利用此代码。
答案 0 :(得分:0)
因此,糟糕的访问和段错误不是同一类别。 Mach-o系统抛出了错误的访问,而segfault是POSIX信号,因此,segfault∈不良访问(它可以被其他POSIX信号抛出。我怀疑你的错误源于你的文件大小,或者操作系统阻止你占用那么多内存。在转储中的位置查看你的记忆,看看存储的是什么。