声明如下所示:
void *malloc(size_t size);
void free(void *pointer)
据我所知, void *malloc 意味着 malloc 返回一个指向 void 的指针(“Void 指针”),而 free 就是 void。有什么不同?为什么会这样?
void
just 表示未定义返回类型(例如,不是指向 a 的指针)char
,只是指定大小的连续内存块。
free()
不返回任何东西。它不需要。
malloc
返回指向void*
已分配内存的指针 ( )。free
释放内存。它不返回任何东西 ( void
)。
void pointer
是通用指针。这可以分配给任何类型的指针。所以 malloc 就是这样设计的。
free() 不会返回任何东西。只需从堆中取消分配具有给定地址条目的内存块。
它们彼此不等价。为什么要比较?
malloc 分配内存,因此它应该返回指向分配内存的指针。
free 释放内存并且它不必返回任何值,所以它是无效的。
C 的问题在于,在这种情况下,它是弱类型的。您不能 malloc 整数、字符、双精度数或任何其他结构的数组 - 对于任何可能的类型(包括您自己的结构)都必须有一个 malloc/free 对。因此,该指针不是返回指向某种类型的指针,而是具有 void 类型。这意味着,数据的类型是不确定的,您通常将该指针转换为您需要的类型指针。
因此 malloc 的常见使用模式是:
type *myMemory = (type *)malloc(x * sizeof(type));
其中 type 是您想要 malloc 的类型(int、char、struct ...),而 x 是您想要 malloc 的“实例”的数量。
free 方法只是从 malloc 中获取指针并释放它。遵循相同的逻辑,它不能采用 int、char... 指针,因此它采用 void 指针。void 指针与任何其他指针“兼容”。
它们是完全不同的东西。它们看起来相似的事实仅取决于所使用的语法。
“void *”是指向没有任何特定类型的内存块的指针。您可以将其转换为任何其他指针类型。
“void”(没有星号)表示该函数根本不返回任何值。
malloc()
是一个内存分配函数,主要工作是return pointer to starting address of the memory block
由 malloc() 分配的。问题是它malloc()
被设计为通用而不是任何single
类型,所以address return should not be for a specific type
(例如 char,int),它应该是通用的,所以malloc()
返回一个 void 指针正在为程序员提供一个选项,将其转换为任何类型并使用该内存。所以它的返回类型是 void *。
因为free()
,它是一个主要工作的内存释放函数free the content of the memory address pointed by the argument
,这也是为泛型设计的,它可以释放任何内存类型,而不仅仅是 char、int 等。所以它的参数类型是 void *。
免费返回什么都没有意味着它是一个无效而不是任何指针或任何其他东西,所以它只是无效。
void*
意思是“任何类型的指针”。指向在特定时刻未定义或不重要的内存类型。
void
什么都不是。没有价值。
printf("malloc returned address %p\n", malloc(1));
是有效的 C,malloc
返回一个指向包含未定义数据的内存块的指针。
printf("free returned status %d\n",free(ptr));
不是有效的 C,因为free
实际上并没有返回任何东西。