是否可以免费'void*'?

Cod*_*Lab 27 c

struct foo
{
    int a;
    int b;
};

void* p = (void*)malloc(sizeof(struct foo));
((foo*)p)->a;//do something.
free(p);//Is this safe?
Run Code Online (Sandbox Code Playgroud)

Lau*_*ves 36

是.

malloc返回void *和释放void *,所以你的一些演员阵容毫无意义,void *即使你从其他类型的指针开始,你也总是释放一个.


Pep*_*por 16

是的,这很安全.分配内存时,运行时库会跟踪每个分配的大小.当你调用free()时,它会查找地址,如果找到该地址的分配,则释放正确的内存量(在该地址分配的块).


Jer*_*fin 6

是 - free将指针指向void,因此当您调用它时,指针(隐式)转换为指向void的指针.

其余代码不太安全:

void* p = (void*)malloc(sizeof(foo));
Run Code Online (Sandbox Code Playgroud)

你应该投的回报将通过malloc(C语言).这可以掩盖忘记的错误#include <stdlib.h>