[英]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.