【发布时间】:2014-03-23 17:20:02
【问题描述】:
输出:访问冲突读取位置 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;
}
};
【问题讨论】:
-
你正在分配一个节点对象给 ptr,然后用 this->head 覆盖它。那有什么意义呢? ptr->next 有效吗?这就是为什么您使用调试器来单步调试代码和示例变量值的原因。
-
这么多代码不足以正确回答。
-
虽然这个函数有内存泄漏但是你应该展示如何将节点添加到列表中。
-
节点 *ptr = 头;也给了我同样的问题。我以类似的方式显示所有节点,该功能工作正常,这个没有。调试器说在 if 条件下无法读取内存
-
@SohaibJamal 例如,构造函数主体是了解头部如何指向有效内存的最低要求。如果它设置为 NULL(或 C++11 中的 nullptr),然后 head 永远不会指向有效内存,则搜索方法将始终失败,并出现访问冲突/分段错误/应用程序崩溃(或以上所有情况)。