Разное отношение к чтению

Я пытаюсь понять, почему эта программа возвращает разные ошибки, когда я изменяю размер буфера:

#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 А :)

Когда возникают ошибки Bad address или File descriptor, я не знаю, как использовать этот код.


person Community    schedule 15.02.2017    source источник


Ответы (1)


Таким образом, плохой доступ и ошибки сегментации — это не одна и та же категория. Плохой доступ выдается системой Mach-o, в то время как segfault является сигналом POSIX, следовательно, segfault ∈ плохой доступ (он может быть вызван другими сигналами POSIX. Я подозреваю, что ваша ошибка связана с размером вашего файла или ОС). блокирует вас от захвата такого большого объема памяти.Посмотрите на свою память в местах дампа и посмотрите, что хранится.

person Community    schedule 15.02.2017