malloc和尺寸似乎不匹配
当我使用malloc和尺寸似乎不匹配,c,malloc,size-t,C,Malloc,Size T,当我使用 fstat(fileno(file), &st); //struct stat st buf = malloc(fsize); //size_t fsize fread(buf, 1, fsize, file); 我真的很怀疑,因为malloc应该为我分配fsize*sizeof(size\u t)很大的空间,但是当我试图访问likebuf+8*fsize时,我就出局了 虽然,buf+fsize在正确的位置,文件的末尾,我刚刚计算了地址,它们都很多!!!像
fstat(fileno(file), &st); //struct stat st
buf = malloc(fsize); //size_t fsize
fread(buf, 1, fsize, file);
我真的很怀疑,因为malloc
应该为我分配fsize*sizeof(size\u t)
很大的空间,但是当我试图访问likebuf+8*fsize
时,我就出局了
虽然,buf+fsize
在正确的位置,文件的末尾,我刚刚计算了地址,它们都很多!!!像malloc一样,只返回我的fsize*sizeof(char)
大空间
所以,我错在哪里,任何帮助都是值得的。你的代码说
malloc(fsize)
但是你想要的是malloc(fsize*sizeof(size\t))
。malloc
函数获取要分配的字节数。它无法知道您将使用内存存储大小\u t
更新:我可能误解了这个问题。当提问者回答我在上面的评论中提出的问题时,我会更新这个答案。“malloc应该像”fsize*sizeof(size\t)“-不应该。如果你想让它这样做,你需要告诉它:
buf=malloc(fsize*sizeof(size\t));
。更好地解释为什么你期望malloc分配fsize*sizeof(size\t)
bytes。然后,如果buf+fsize
指向文件的末尾(比最后一个字节多一个字节),那么您希望用buf+8*fsize
读取什么?malloc(fsize)
allocsfsize
字节“,不再。如何声明buf
?确切地说,size\u t
与任何事情都有什么关系?你的意思是buf=malloc(st.st\u size)
?因为malloc的原型:“void*malloc(size\u t size)”我认为OP是混乱的,我不确定你是否有助于消除这种混乱。似乎没有理由想要fsize*sizeof(size\u t)
存储在这里……你可能是对的。我会在对问题的评论中问OP一些问题来澄清。事实证明,每个地址在内存中占用8个字节,我随后检查了这一点。不过还是谢谢你。