Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
malloc和尺寸似乎不匹配_C_Malloc_Size T - Fatal编程技术网

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)
很大的空间,但是当我试图访问like
buf+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)
allocs
fsize
字节“,不再。如何声明
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个字节,我随后检查了这一点。不过还是谢谢你。