如果您有一个未初始化的指针,并且错误地尝试释放它,这是否会导致未定义的行为?
喜欢:
int main(void){
char *string;
free(string);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
释放未初始化的指针会导致未定义的行为吗?
是的。
但是,释放空指针是明确定义的。
来自 C99 标准:
该
free函数导致 指向的空间ptr被释放,即可供进一步分配。如果ptr是空指针,则不执行任何操作。否则,如果该参数不匹配的指针早些时候返回calloc,malloc或realloc功能,或如果空间已释放通过调用free或者realloc,该行为是未定义。