引发异常:读取访问冲突.**此**0x40错误

Exception thrown: read access violation. **this** was 0x40 error

本文关键字:0x40 错误 访问冲突 读取 异常      更新时间:2023-10-16
void BST::insert(node* tree, node* newnode)
{
if (root == NULL)
{
root = new node;
root->software = newnode->software;
root->package_name = newnode->package_name;
root->package_version = newnode->package_version;
root->left = NULL;
root->right = NULL;
return;
}
if (tree->package_name == newnode->package_name)
{
return;
}
if (tree->package_name > newnode->package_name)
{
if (tree->left != NULL)
{
insert(tree->left, newnode);
}
else
{
tree->left->software = newnode->software;
tree->left->package_name = newnode->package_name;
tree->left->package_version = newnode->package_version;
(tree->left)->left = NULL;
(tree->left)->right = NULL;
return;
}
}
else
{
if (tree->right != NULL)
{
insert(tree->right, newnode);
}
else
{
tree->right->software = newnode->software;
tree->right->package_name = newnode->package_name;
tree->right->package_version = newnode->package_version;
(tree->right)->left = NULL;
(tree->right)->right = NULL;
cout << "Node Added To Right" << endl;
return;
}
}
}
void read(BST b,node* r)
{
ifstream file_obj;
file_obj.open("file_software.txt", ios::in);
while (!file_obj.eof())
{
string name, version;
int quantity, price;
getline(file_obj, name, '$');
file_obj >> version;
file_obj >> quantity;
file_obj >> price;
package a(name, version, quantity, price);
node* temp;
temp = new node;
temp->software = a;
temp->package_name = name;
temp->package_version = version;
b.insert(r, temp);
}
}

我收到此错误引发异常:读取访问冲突。这是0x40错误,如果(树>package_name== Newnode->package_name(插入第一个节点作为root。在这一段代码中,如果(树>package_name>newnode->package_name(抛出异常:读取访问冲突。_Right0x40。

在这一行中

tree->left->software = newnode->software;

这部分

if (tree->left != NULL)
{
insert(tree->left, newnode);
}
else
{
tree->left->software = newnode->software;
tree->left->package_name = newnode->package_name;
tree->left->package_version = newnode->package_version;
(tree->left)->left = NULL;
(tree->left)->right = NULL;
return;
}

由于if声明,您正在取消引用保证NULL的内容。

您似乎忘记分配节点。

if (tree->left != NULL)
{
insert(tree->left, newnode);
}
else
{
tree->left = new node; // add this
tree->left->software = newnode->software;
tree->left->package_name = newnode->package_name;
tree->left->package_version = newnode->package_version;
(tree->left)->left = NULL;
(tree->left)->right = NULL;
return;
}

应将相同的修复程序应用于tree->right

此外,while (!file_obj.eof())是错误的,您应该检查读数是否成功。
(有关更多信息:C++ - 为什么 iostream::eof 在循环条件中(即while (!stream.eof())( 被认为是错误的?- 堆栈溢出(

还有一点:在函数read中分配给temp的缓冲区没有释放, 所以它会导致内存泄漏。 应该释放或静态分配它以避免这种情况。