Я использую Visual Studio 2013, и я хочу создать свой собственный конструктор копий для односвязного кругового списка. Вот мой код для конструктора.C++ - конструктор копирования для односвязного кругового списка
CCircularList::CCircularList(CCircularList& srcList) // Copy Constructor
{
Node* sPtr = srcList.top; // source pointer, top points to first entry in the list
Node* dPtr = top = new Node(*sPtr); // dPtr is destination pointer,
sPtr = sPtr->next;
while (sPtr != srcList.top)
{
dPtr->next = new Node(*sPtr);
sPtr = sPtr->next;
dPtr = dPtr->next;
}
setPosition(srcList.getPosition());
dPtr->next = top;
}
Это не работает должным образом. После инициализации списка с использованием конструктора копирования я получаю эту ошибку, когда пытаюсь ее отобразить.
Необработанное исключение в 0x011F3C99 в Circular List.exe: 0xC0000005: Место чтения нарушения доступа 0x00000000.
Вот экземпляр конструктора класса Node.
Node::Node(Node& newNode) // Copy constructor
{
nData = newNode.nData; // Visual studio points to this line when giving error
next = newNode.next;
}
Заранее спасибо.
вы должны сделать проверку нулевого указателя – benlong
Я думаю, что этот вопрос трудно получить; Мы не знаем весь код CCircularList, что делает функция setPosition/getPosition и конструктор копирования класса Node правильно (нечего делать, когда вы хотите сделать список мелких копий) ... –
Я согласен с @benlong. Ваше «нарушение прав доступа» может происходить во второй строке этой функции, когда вы используете sPtr. Я не удивлюсь, если эта копия ctor будет запущена в ближайшее время. (Также: где ваши инициализаторы?) – benschumacher