簡體   English   中英

std :: cout是否初始化(或預初始化)指針?

[英]Does std::cout initialize (or pre-initialize) a pointer?

我對C ++中的指針有疑問。

我知道您不能刪除未初始化的指針,並且如果要使用delete ,則應該首先初始化該指針。 但是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尚未初始化,因為如果我在刪除之前添加此行,則無法為其分配任何內容

*ptr = 5;

該程序將按預期崩潰。 為什么,如果在刪除前使用std :: cout ,程序將不會崩潰? 我知道cout並未初始化指針,但這是以某種方式“預初始化”(或其他方式)嗎?
謝謝!
以斯拉

刪除未初始化的指針是未定義的行為。

如果您很幸運,未定義的行為可能會使您的程序崩潰。 您很不幸,您的程序沒有崩潰。

在這種情況下,當您調用delete ptr ,編譯器會知道ptr是垃圾。 也許它只是用任何方便的值調用delete ,如果您使用cout ,那么巧合的是nullptr就是那個值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM