繁体   English   中英

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

[英]Does freeing an uninitialized pointer result in undefined behavior?

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

喜欢:

int main(void){

    char *string;
    free(string);

    return 0;
}

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

是。

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

从C99标准:

free函数导致ptr指向的空间被释放,即可用于进一步分配。 如果ptr是空指针,则不执行任何操作。 否则,如果参数与callocmallocrealloc函数先前返回的指针不匹配,或者如果通过调用freerealloc释放了空间,则该行为是undefined

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

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

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

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

从C99:

(7.20.3.2p2)“如果ptr是空指针,则不执行任何操作。否则,如果参数与calloc,malloc或realloc函数先前返回的指针不匹配,或者如果空间已被调用解除分配为了释放或重新分配,行为是不确定的。“

是的,确实如此,因为您应该只free() 1.为NULL或2.是通过调用malloc()calloc()realloc()获得的指针。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM