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

时间:2013-08-10 09:58:32

标签: c pointers free

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

像:

int main(void){

    char *string;
    free(string);

    return 0;
}

4 个答案:

答案 0 :(得分:4)

  

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

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

来自C99标准:

  

free函数导致ptr指向的空间被释放,即可用于进一步分配。如果ptr是空指针,则不执行任何操作。否则,如果参数与先前由callocmalloc或{}返回的指针不匹配   realloc功能,或者如果通过调用freerealloc取消分配空间,则行为未定义

答案 1 :(得分:2)

是的,因为访问任何未初始化的变量会引发未定义的行为。

这包括将一个未初始化的指针传递给free()。这本身还包括“意外”的uninitialise指针可能具有等于NULL的值的情况。

答案 2 :(得分:1)

是的,这是未定义的行为。

传递给free的指针应该是指向使用malloccallocrealloc或空指针分配的有效对象的指针。

来自C99:

  

(7.20.3.2p2)“如果ptr是空指针,则不发生任何操作。否则,如果参数与calloc,malloc或realloc函数返回的指针不匹配,或者空格已被释放通过调用free或realloc,行为未定义。“

答案 3 :(得分:0)

是的,确实如此,因为您只应free()指向1. NULL或2.您通过致电malloc()calloc()或{获得的指针{1}}。