2017-01-01 7 views
-1

deleteキーワードを使用してポインタで指されたメモリの割り当てを解除するためのオンライン練習問題を解決しました。C++です。以下は私のコードです。deleteキーワードを使用したメモリの割り当て解除 -

#include<iostream> 
#include<string> 
#include<conio.h> 

int main() 
{ 
    double *ptrDouble = new double; 
    *ptrDouble = 22; 

    std::cout << "\nValue of ptrDouble = " << *ptrDouble << std::endl; 

    delete ptrDouble; 

    std::cout << "Value of ptrDouble = " << *ptrDouble << std::endl; 

    getch(); 
} 

あなたはポインタでDELETEキーワードを使用している場合ので、私はこの練習を解決していますオンラインサイト、

によると、メモリは を割り当て解除されますので、内容は利用できませんあなたの アプリケーションに送信します。内容にアクセスしようとすると、メモリ違反のためにアプリケーションがクラッシュする が発生します。

しかし、私は、メモリの割り当てを解除した後ptrDoubleの値を印刷しようとすると、プログラムがクラッシュしない、代わりにガベージ値がコンソールに出力されます。

質問質問が間違っている、またはオンラインサイトがプログラムがクラッシュするかどうかについて間違っていますか?

PS。私はビジュアルスタジオ2015コミュニティを使用しています。

+3

文は間違っています。割り当て解除されたメモリ領域へのポインタを参照解除することは、未定義の動作です。例えば、クラッシュ時に、(明らかに)ガベージ値を返します。そこに格納されている最後の値を返すことができます。 – MikeMB

+0

未定義の動作をしているものを実行しているときは、グラブのために何かが起きています –

+1

未定義の動作です。それはクラッシュする可能性があります。 – Danh

答えて

1

解放されたメモリにアクセスすると、未定義の動作が発生します。ゴミを落としたり読んだりすると、どちらもそのカテゴリに分類されます。プログラムが実際にクラッシュするかどうかは、その特定のメモリブロックがOSに戻されたのか、単に再利用可能になったのかによって異なります。

関連する問題