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)
是,有一点不同.
变式2无效.free期望一个指针先前由返回malloc,calloc或realloc.*p2但是int ,这是分配空间中的第一个.如上所述man free,因此会出现未定义的行为(针对此特定情况调整的报价):
free()函数释放存储器空间指向[p1],它必须已经由先前调用返回malloc(),calloc()或realloc().否则,会发生未定义的行为.
笔记: