2

nullを指すポインタがあり、それに値を割り当てたいと思います。しかし、それを尊重すると、エラーが発生します。私はこれを試しました:

*nullPointer=value;

しかし、私が言ったように、私はエラーを受け取ります。これどうやってするの?。できない

nullPointer=&value

後の値(オブジェクト)が削除され、nullPointerが無効なメモリを指すためです。

4

3 に答える 3

7

ポインタは、意味のあるものを指すために有効なオブジェクトを指している必要があり、ポインタが指しているオブジェクトが有効なままであることを確認するのはユーザーの責任です。

それが指すオブジェクトがスタック上にあり、スコープが終了すると無効になる場合は、動的メモリを使用してオブジェクトをヒープに割り当てる必要があります。しかし、あなたが何をしているのか、そしてあなたがこれをここで必要とするかどうかを知るには情報が少なすぎます。

int *ptr = new int;
*ptr = value;
...
...
delete ptr;
于 2012-04-18T18:30:20.477 に答える
4

ポインタは、メモリ(RAM)内の場所を指します。あなたが持っているとき、null pointerそれはnullを指しています。つまり、それはメモリ内の場所を指していないということです。ポインタがnullである限り、それをバックアップするメモリがないため、情報を格納するために使用することはできません。

ヌルポインタを使用するには、最初にメモリを割り当ててから、新しく割り当てられたメモリを指すポインタを設定する必要があります。

*int p = null;    
*p = 10; //this won't work as there is no memory backing up this pointer
p = new int;
*p = 10;
于 2012-04-18T18:30:38.667 に答える
2

オブジェクトが削除されるまで/削除されない限り、オブジェクトを参照するポインタが必要なようです。その時点で、オブジェクトは再びnullポインタのように動作します。つまり、少なくとも、オブジェクトがそれ以上何も指していないと検出できます。 。

その場合は、おそらくweak_ptr(C ++ 11、TR1、およびBoostで使用可能)が必要です。と一緒に使用しますshared_ptr。オブジェクトの最後shared_ptrが破壊されると、オブジェクト自体も破壊されます。その後、がweak_ptr何も参照していないことを検出できます(特に、Boostのドキュメントに詳細があります)。

編集:これはBoostドキュメントからの例ですweak_ptr

shared_ptr<int> p(new int(5));
weak_ptr<int> q(p);

// some time later

// this will succeed *only* if at least one other reference to the pointee still exists.
if(shared_ptr<int> r = q.lock())
{
    // use *r
}
于 2012-04-18T18:43:10.847 に答える