gpt4 book ai didi

c++ - std::cout 是否初始化(或预初始化)指针?

转载 作者:行者123 更新时间:2023-11-28 06:24:14 25 4
gpt4 key购买 nike

我对 C++ 中的指针有疑问。

我知道你不能删除未初始化的指针,如果你想使用删除,应该先初始化指针。但是 std::cout 是否以某种方式“初始化”了它?
如果我尝试运行下面的代码,它会在执行过程中崩溃。

#include <iostream>
int main (){
int *ptr;
delete ptr;
return 0;
}

这是我所期望的,我对此很满意,因为指针未初始化。但是,如果我尝试运行下面的代码,它不会崩溃!

#include <iostream>
int main (){
int *ptr;
std::cout << ptr << std::endl; //This is the new line
delete ptr;
return 0;
}

我知道指针 ptr 没有被初始化,因为如果我在 delete

之前添加这一行,我不能给它分配任何东西
*ptr = 5;

程序将按预期崩溃。为什么,如果我在删除之前使用 std::cout 程序就不会崩溃?我知道 cout 没有初始化指针,但这在某种程度上是“预初始化”(或其他)吗?
谢谢!
以斯拉

最佳答案

删除未初始化的指针是未定义的行为。

如果幸运的话,未定义的行为可能会使您的程序崩溃。您不走运,您的程序没有崩溃。

在这种情况下,当您调用delete ptr 时,编译器知道ptr 是垃圾。也许它只是用方便的任何值调用 delete,如果您使用 coutnullptr 恰好是那个值。

关于c++ - std::cout 是否初始化(或预初始化)指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28802431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com