2
#include <stdio.h>


int *pPointer;

void SomeFunction()
{
    int nNumber;
    nNumber = 25;    

    // make pPointer point to nNumber:

    pPointer = &nNumber;
}

void main()
{
    SomeFunction(); // make pPointer point to something

    cout<< "Value of *pPointer: "<< *pPointer <<endl;
}

このようなポインターの使用は危険であると言われましたが、なぜ危険なのか、そのコードを書くための「安全な」方法を誰か説明してもらえますか? 25 は常にそのように画面に出力されますか? そうでない場合は、なぜですか?

4

3 に答える 3

3
  • Unsafe, because its value may be overwritten

  • Safe way: just

    int SomeFunction()
    {
        int nNumber;
        nNumber = 25;    
        return nNumber;
    }
    

    Will do fine. If your return value is large, return value optimization will save your life anyway.

  • 25 printed? Implementation specified. Most likely not because you are in a new stack frame when the function returned.

于 2013-11-11T12:06:05.027 に答える
0

ポインターはメモリアドレスであり、最新のコンピューターではメモリが保護されているため(メモリを所有するプログラムのみがアクセスを許可されているため)、メモリへの読み取りまたは書き込みの試みであるため、使用するのは危険であると呼ばれるワイルドポインターについて話しているアドレス 0 または NULL を指定すると、メモリ違反エラーでプログラムがクラッシュします。

これを保護する最善の方法は、ポインターが作成されるとすぐにポインターを初期化することです。

もう 1 つの方法は、ポインタを使用する前にテストすることです。

if (pointer == 0) { 
   cout << "WARNING... cant use this pointer"; 
} 
else { 
   // it is okay to use this pointer 
} 
于 2013-11-11T12:09:53.660 に答える