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) 中的一个位置。当您有 anull pointer它指向 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

听起来您想要一个指向对象的指针,直到/除非该对象被删除,此时它再次大致像空指针一样 - 即,您至少可以检测到它不再指向任何东西.

如果是这种情况,您可能需要一个weak_ptr(在 C++11、TR1 和 Boost 中可用)。您将其与shared_ptrs 一起使用。当最后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 回答