2014-09-22 122 views
1

我有一個指針代碼如下:通/複製指向另一個指針

class NsObject : public TclObject, public Handler { 
public: 
    NsObject(); 
    virtual ~NsObject(); 
    virtual void recv(Packet*, Handler* callback = 0) = 0; 
    virtual void recv(Packet* p, const char* s); 
} 

NsObject* uptargetTX;  
NsObject* uptarget_; 

void NsObject::recv(Packet *p, const char*) 
{ 
    Packet::free(p); 
} 

if (NodeType_ == TX) { 
    uptarget_->recv(ppp, (Handler*) 0); 
    *uptargetTX = *uptarget_; //in this line error happens 
} 

我想用*uptargetTX = *uptarget_;但是一個合格/指針uptarget_複製到uptargetTX出錯

segmentation fault (core dumped) 

然後我更改爲uptargetTX = uptarget_;,但發生同樣的錯誤。如何消除這個錯誤?

回答

2

uptargetTXuptarget_是未初始化的,所以它們指向隨機內存位置,因此訪問會導致分段錯誤。根據什麼你正在嘗試做的,你可能不得不例如這樣的第一分配內存:NsObject* uptargetTX = new NsObject

+0

我得到了這個錯誤:錯誤:無法分配抽象類型'NsObject'的對象 – user2290560 2014-09-22 07:59:12

+0

@ user2290560您通過聲明'virtual void recv = 0'來讓您的類抽象,因此您無法構建它的一個對象。 – TNA 2014-09-22 08:27:07

1

我有沒有你的代碼做什麼的想法,但這個

NsObject* uptarget_; 
uptarget_->recv(ppp, (Handler*) 0); <- dereference the pointer 

是錯擺在首位:您需要將該指針初始化爲之前有效的內容。

其餘的原因也是錯誤的。