引发异常:读取访问冲突.**此**0x40错误
Exception thrown: read access violation. **this** was 0x40 error
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
的缓冲区没有释放, 所以它会导致内存泄漏。 应该释放或静态分配它以避免这种情况。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 引发异常:读取访问冲突.**此**0x40错误