输出:访问冲突读取位置0x0093F3DC。
我似乎无法弄清楚问题所在。 head和next指针在各自的构造函数中初始化为null。class List{
public:
node *head;
List(void) // Constructor
{
head = NULL;
}
void insertNode(int f)
{
node *newNode;
newNode=new node();
newNode->value = f;
newNode->next=head;
head=newNode;
}
void displayList()
{
node *ptr=head;
while (ptr!=NULL)
{
cout<<ptr->value<<endl;
ptr=ptr->next;
}
}
bool search( int val)
{
node *ptr= head;
while (ptr!=NULL)
{
if(ptr->value == val)
{
return true;
}
ptr=ptr->next;
}
return false;
}
};
答案 0 :(得分:0)
最有可能的是,最好只声明一个指针,而不是分配一个Node实例,然后擦除新分配的内存(例如导致悬空内存泄漏)。例如:
bool search( int val)
{
//
// Declare the pointer to traverse the data container, assign to the head
// This works only if head is valid. It is assumed that head is pointing
// to valid memory by the constructor and/or other class member functions.
//
node *ptr = this->head;
while (ptr!=NULL)
{
if(ptr->value == val)
{
return true;
}
ptr=ptr->next;
}
return false;
}
在上面的类实现细节中,内部头指针始终分配给InsertNode中的newNode内存。因此,每次调用InsertNode时头部都会移动。这是所需的功能吗?