2种免费通话方式 - 有区别吗?

Seb*_*Nag -2 c heap malloc free pointers

free在堆上分配内存后,这两种调用变量之间是否存在差异:

// variant 1
int* p1 = (int*) malloc(sizeof(int)*4);
free(p1);

//variant 2
int* p2 = (int*) malloc(sizeof(int)*4);
free(*p2);
*p2 = NULL;
Run Code Online (Sandbox Code Playgroud)

cad*_*luk 6

是,有一点不同.

变式2无效.free期望一个指针先前由返回malloc,callocrealloc.*p2但是int ,这是分配空间中的第一个.如上所述man free,因此会出现未定义的行为(针对此特定情况调整的报价):

free()函数释放存储器空间指向[ p1],它必须已经由先前调用返回malloc(),calloc()realloc().否则,会发生未定义的行为.


笔记: