释放未初始化的指针会导致未定义的行为吗?

201*_*ker 3 c free pointers

如果您有一个未初始化的指针,并且错误地尝试释放它,这是否会导致未定义的行为?

喜欢:

int main(void){

    char *string;
    free(string);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Oli*_*rth 5

释放未初始化的指针会导致未定义的行为吗?

是的。

但是,释放空指针是明确定义的。

来自 C99 标准:

free函数导致 指向的空间ptr被释放,即可供进一步分配。如果ptr是空指针,则不执行任何操作。否则,如果该参数不匹配的指针早些时候返回callocmallocrealloc功能,或如果空间已释放通过调用free或者realloc,该行为是未定义