2014-09-22 2 views
1

У меня есть код указателя следующим образом:Pass/указатель копирования на другой указатель

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 
} 

Я хочу передать/копировать указатель uptarget_ на uptargetTX с помощью *uptargetTX = *uptarget_;, но что-то идет не так

segmentation fault (core dumped) 

Затем я перехожу на uptargetTX = uptarget_;, но такая же ошибка возникает. Как удалить эту ошибку?

ответ

2

uptargetTX и uptarget_ неинициализированы, поэтому они указывают на случайные ячейки памяти, поэтому доступ вызывает ошибку сегментации. В зависимости от того, что вы пытаетесь сделать, вы, вероятно, придется выделить память первого, например, как это: NsObject* uptargetTX = new NsObject

+0

Я получил эту ошибку: ошибка: не может выделить объект абстрактного типа «NsObject» – user2290560

+0

@ user2290560 Вы сделали вас абстрактным классом, объявив 'virtual void recv = 0', поэтому вы не можете построить его объект. – TNA

1

Я понятия не имею, что делает ваш код, но это

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

неправильно в первую очередь : вам нужно инициализировать этот указатель на то, что было раньше.

Остальное также неверно по той же причине.

Смежные вопросы