c使用malloc分配内存

时间:2012-08-29 11:30:50

标签: c malloc

我有这些变种:

uint32_t fsize;
char *filebuffer = NULL;
fsize = fileStat.st_size;

如果我想到malloc 正确的内存,我必须编写的代码是:

malloc(fsize);

或者这个:

malloc(fsize * sizeof(char *));

谢谢!

3 个答案:

答案 0 :(得分:5)

sizeof(char*)是指针的大小,可能不是你想要的。按照名称,我假设fsize是文件的大小(以字节为单位),所以很简单

malloc(fsize);

很好。

malloc()分配指定的字节数。如果您要调用malloc(fsize * sizeof(char *)),那么您将分配太多内存,因为您将所需的字节数(fsize)乘以一个额外的因子sizeof(char*),这是存储指针所需的字节数(通常为4或8个字节)。

在决定分配多少字节时,最终将分配的内存分配给char*指针这一事实无关紧要。

答案 1 :(得分:1)

您写道:

  

如果我想要正确的内存,我必须编写的代码是   这样:

     

的malloc(FSIZE);或者这个:

     

malloc(fsize * sizeof(char *));

这两个语句之间的区别是malloc(fsize)给你足够的内存来存储文件中的字符,malloc(fsize * sizeof(char *))给你足够的内存来存储指向足够指针的地址到文件中的每个字符。

我认为你要问的是:

“或者:malloc(fsize * sizeof(char));”

换句话说,我想将malloc中文件中的字符数乘以每个字符的大小,这是一个合理的问题,但对于字符而言,它是无关紧要的,因为sizeof(char)= 1.所以让我们说你的文件是文字,里面有4个字母:

malloc(fsize) == malloc(4)
malloc(fsize * sizeof(char)) == malloc(4 * 1) == malloc(4)
malloc(fsize * sizeof(char *)) == malloc(4 * 4) == malloc(16)

4的原因是因为你没有得到数据的大小,而是以字节为单位的地址大小(例如:0x0035F900)。

希望有助于澄清答案。

答案 2 :(得分:0)

malloc(size)函数分配一个大小为内存字节的块,返回指向块开头的指针。像这样:

uint32_t fsize = fileStat.st_size;
char* filebuffer = (char*)malloc(fsize);

并且不要忘记

free(filebuffer);