[英]Malloc fails with errno 12
我将数据读/写到自定义原始文件中
version (int)
data
我实现了一种更通用的方式来写入数据,现在预期的格式是
headersize (size_t)
header (headersize)
data
因此,我手动将4
( sizeof(int)
)添加到旧的原始文件(使用ghex
)中,以使其与新的实现兼容。
现在,当我的计划是失败malloc
-ing空间的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
似乎表明我没有足够的内存,但是当我在malloc
调用中对sizeof(int)
进行硬编码时,失败不会不再发生了。
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
我怀疑12的errno
号隐藏了其他内容,但我不知道是什么。
有你的问题。 sizeof(size_t)
必须采用指针大小,并且可以/可以不是sizeof(int)
。 如果使用(int)
强制转换打印它,则看起来没问题,因为仅评估了最低有效的4个字节(在您的情况下)。 如果将其用于malloc()
则将使用整个size(size_t)
,它要么是垃圾,要么是标头的一部分。
腌制数字时,您应该:
arpa/inet.h
hton * )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.