Я чтение/запись данных в пользовательский файл необработанного, где я имел обыкновение писатьMalloc терпит неудачу с Errno 12
version (int)
data
я реализовал более общий способ, чтобы написать свои данные и теперь ожидаемый формат
headersize (size_t)
header (headersize)
data
Поэтому я вручную добавил 4
(sizeof(int)
) в старый необработанный файл (с ghex
), чтобы сделать его совместимым с новой реализацией.
Теперь моя программа терпит неудачу, когда malloc
-ную пространство для header_p
, на котором я хочу прочитать header
из исходного файла.
size_t headersize;
fread(&headersize, sizeof(size_t), 1, fd);
printf("%p\t%d\n", header_p, (int) headersize);
header_p = malloc(headersize);
printf("%p\t%d\t%d\t%s\n", header_p, (int) headersize, errno,strerror(errno));
Возвращает
(nil) 4
(nil) 4 12 Cannot allocate memory
Почему бы malloc
неудачу на такой операции? headersize
кажется корректно записанным в необработанном файле, так как он равен 4
и errno
из 12
, по-видимому, указывает, что у меня недостаточно памяти, но когда я жестко код sizeof(int)
при вызове malloc
, сбой больше не возникает ,
size_t headersize;
fread(&headersize, sizeof(size_t), 1, fd);
printf("%p\t%d\n", header_p, (int) headersize);
header_p = malloc(sizeof(int));
printf("%p\t%d\t%d\n", header_p, (int) headersize, errno);
Возвращает
(nil) 4
0x8e6e90 4 0
Я подозреваю, что errno
12 скрывает что-то еще, но я чего не понимаю.
Как определяется 'headersize' в коде? –
'printf ("% s \ n ", strerror (errno));' расскажет вам больше. – mch
читайте из файла: 'fread (& headersize, sizeof (size_t), 1, multifile-> fd)' – Jav