由于某种原因,我的程序在完成复制构造函数测试后在析构函数中设置调试后中断。我通过它进行了调试,发现由于某种原因,头指针在进入析构函数后立即恢复为垃圾,即使头指针在退出复制构造函数时正确指向第一个节点,从而导致分配我的析构函数中的第一个链接字段失败。
当我运行考试存根时,它通过了堆测试,并且在析构函数中断之前通过了复制构造函数测试,为什么会这样?顺便说一句,我没有包含我的所有代码,因为我不想简单粘贴固定代码,我只想知道为什么会发生这种情况,以便我可以学习..我真的不想恢复发布这个问题,但我'一直在试图弄清楚为什么这东西会这样,它让我发疯..
这是我的析构函数,带有中断点
PriorityQueue::~PriorityQueue( )
{
Node *nodeptr, *nextnode=NULL;
nodeptr = head_ptr; // CONTAINS GARBAGE AT POINT OF BREAK
while ( nodeptr != NULL)
{
nextnode = nodeptr->link; // THIS IS WHERE IT BREAKS,
delete nodeptr; //BECAUSE ITS ASSIGNING GARBAGE FROM HEAD POINTER
nodeptr = nextnode;
}
many_nodes = 0;
head_ptr = NULL;
}
这是我的复制构造函数
PriorityQueue::PriorityQueue(const PriorityQueue& source)
{
many_nodes = source.many_nodes; // copy node count
Node * node1 = NULL; // declare node pointer
Node * precursor = NULL; // declare precursor for new list
Node * copycursor = NULL; // declare cursor for copy list
copycursor = source.head_ptr; // set copy cursor to source head
int x = 0;
while(x < many_nodes) // start a loop for num of nodes
{
node1 = new Node; // point node1 to a new allocated node
node1->data = copycursor->data; // copy over data to that node
node1->priority = copycursor->priority;
if (copycursor == source.head_ptr) // if we're at the head
head_ptr = node1; // set new head to copy head
if(precursor != NULL) // if this isn't the first iteration
precursor->link = node1; // link the last node to this new node
precursor = node1; // precursor is now on this node
copycursor = copycursor->link; // copy cursor is now advanced
x++;
}
}
我还添加了一张我的观点的图片,它在析构函数中中断以更容易地显示值