为什么malloc和free有不同的返回类型?

时间:2012-10-11 06:49:55

标签: c pointers

声明如下:

void *malloc(size_t size);
void free(void *pointer)

据我所知,void * malloc意味着malloc返回一个指向void的指针(“Void指针”),而free则只是void。有什么不同?为什么看起来这样?

8 个答案:

答案 0 :(得分:3)

void只表示未定义返回类型(例如,不是指向char的指针),只是指定大小的连续内存块。

free()不会返回任何内容。它不需要。

答案 1 :(得分:3)

malloc向指定的内存返回指针(void*)。 free释放了记忆。它不会返回任何内容(void)。

答案 2 :(得分:2)

void pointer是通用指针。这可以分配给任何类型的指针。所以malloc就是这样设计的。

free()不会返回任何内容。简单地从堆中取消分配具有给定地址条目的内存块。

答案 3 :(得分:2)

它们并不相同。为什么比较?

malloc分配内存,因此它应该返回指向内存的内存的指针。

free释放内存并且不必返回任何值,因此它是无效的。

答案 4 :(得分:1)

C的问题在于,在这种情况下,它是弱类型的。你不能malloc一个int,chars,double,或任何其他结构的数组 - 必须有任何类型的malloc / free对(包括你自己的结构)。因此,指针不是返回指向某种类型的指针,而是具有void类型。这意味着,数据的类型是不确定的,您通常会将该指针强制转换为您需要的类型指针。

malloc的常见用法模式是:

type *myMemory = (type *)malloc(x * sizeof(type));

其中type是你想要malloc的类型(int,char,struct ...),x是"实例的数量"你想要malloc。

free方法只接受来自malloc的指针并释放它。遵循相同的逻辑,它不能采用int,char ...指针,因此它需要void指针。空指针是"兼容"与任何其他指针。

答案 5 :(得分:1)

他们是完全不同的东西。它们看起来很相似的事实只取决于使用的语法。

" void *"是指向内存块的指针,没有与之关联的任何特定类型。您可以将其强制转换为任何其他指针类型。

"空隙" (没有星号)意味着该函数根本不会返回任何值。

答案 6 :(得分:1)

malloc()是一个内存分配函数,主要工作是由malloc()分配的return pointer to starting address of the memory block。问题是malloc()被设计为通用而不是任何{{1}输入single(例如char,int),它应该是通用的,因此address return should not be for a specific type返回一个void指针,它给程序员一个选项,将它转换为任何类型并使用该内存。所以它的返回类型是void *。

对于malloc(),它是一个内存释放函数,主要作业是free(),这也是为通用而设计的,它可以释放任何内存类型,而不仅仅是char,int等.so它的参数类型是void *。

自由返回没有任何意味着这是一个空洞而不是任何指针或任何其他东西,所以它只是无效。

答案 7 :(得分:0)

void*表示“任何类型指针”。指向哪个类型在特定时刻未定义或不重要的记忆。

void一点也不明白。没有价值。

printf("malloc returned address %p\n", malloc(1));有效C,malloc返回指向包含未定义数据的内存块的指针。

printf("free returned status %d\n",free(ptr));无效C,因为free实际上没有返回任何内容。