malloc()不分配缓冲区大小

时间:2014-10-11 07:15:02

标签: c linux

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

由于某种原因,我的缓冲区大小始终不会改变其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);
}

3 个答案:

答案 0 :(得分:2)

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

的块

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

如果(缓冲== NULL)     printf(“malloc()失败\ n”);

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