【问题标题】:malloc() doesn't allocate buffer size [duplicate]malloc() 不分配缓冲区大小[重复]
【发布时间】:2014-10-11 07:15:02
【问题描述】:

我正在尝试编写一个读取文件大小的代码,然后相应地分配缓冲区大小。

由于某种原因,我的缓冲区大小并不总是改变它的 4 字节。

任何提示为什么我的缓冲区没有分配等于读取文件大小的内存?

#include <stdio.h>
#include <stdlib.h>

int main ()
{
   FILE *file,*fp;

   file = fopen("file.txt", "r");
   fp = fopen( "outputnew.txt" , "w" );

   long lSize;

   fseek(file, 0, SEEK_END);
   lSize = ftell(file);
   fseek(file, 0, SEEK_SET);

   char *buffer = (char*) malloc(sizeof(char)*lSize);
   printf("%d\n",sizeof(buffer));  
   return(0);
}

【问题讨论】:

标签: c linux


【解决方案1】:

malloc 工作正常,但您对缓冲区大小的测试是错误的。 sizeof(buffer) 返回变量buffer 的大小,即char *。在 32 位平台上,这将始终是 4 个字节。你想要的是buffer 指向的堆分配的大小;没有简单的方法可以返回。但是,您的代码是正确的,因为它将分配一个大小为 sizeof(char)*lSize

的块

【讨论】:

    【解决方案2】:

    你的缓冲区没问题。从 C 编译器的角度来看,bufferchar *,因此 sizeof(buffer)sizeof(char *) aka 4。只要 malloc 返回有效(非空)地址,您就可以。

    【讨论】:

      【解决方案3】:

      malloc() 通常永远不会失败。或者如果您想检查 malloc() 是否失败,请检查您存储在缓冲区中的返回地址。

      如果(缓冲区==NULL) printf("malloc() 失败\n");

      而sizeof(buffer)返回指针变量buffer的大小。在 x86 平台上为 4 个字节,在 x64 平台上为 8 个字节。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-21
        • 2014-07-23
        • 1970-01-01
        • 1970-01-01
        • 2020-09-05
        • 2011-06-07
        相关资源
        最近更新 更多