来自引用指针的内存泄漏
Memory Leak from Referenced Pointer
我正在学习引用指针和内存泄漏。
我创建了一个方法,该方法接收指向 NodeData 的指针,创建一个包含 NodeData 的 NodeData、一个左指针和一个右指针,并根据其值插入它。我正在使用引用指针来遍历我的树。每次声明新的 Node 对象并超出范围时,我都会收到内存泄漏。
我认为由于指针引用指向对象,它并没有消失。我的程序运行良好,但是当我使用 valgrind 时,它会出现错误。
我已经以多种方式编写了此方法,但找不到修复它的方法。我已经发布了我写过的最简洁的方法。
bool BinTree::insert(NodeData* s) {
Node* currentPtr = root;
bool insert = insertHelper(s, currentPtr);
return insert;
};
bool BinTree::insertHelper(NodeData* s, Node*& currentPtr) {
if (currentPtr == NULL) {
Node* newNodePtr = new Node;
newNodePtr->data = s;
newNodePtr->left = NULL;
newNodePtr->right = NULL;
currentPtr = newNodePtr;
return true;
} else if (*s == *currentPtr->data) {
return false;
} else if (*s < (*currentPtr->data)) {
return insertHelper(s, currentPtr->left);
} else {
return insertHelper(s, currentPtr->right);
}
}
由于类似的错误,我在整个程序中遇到很多内存泄漏。
或者,有人会解释指针引用背后的概念,或者了解它的方法吗?
此方法使用此方法:
void buildTree(BinTree& T, ifstream& infile) {
string s;
for (;;) {
infile >> s;
cout << s << ' ';
if (s == "$$") break; // at end of one line
if (infile.eof()) break; // no more lines of data
NodeData* ptr = new NodeData(s); // NodeData constructor takes string
// would do a setData if there were more than a string
bool success = T.insert(ptr);
if (!success)
delete ptr; // duplicate case, not inserted
}
}
你可能会有更多的运气
bool BinTree::insert(NodeData* s) {
bool insert = insertHelper(s, root);
return insert;
};
代码修改的是局部变量,而不是根变量。
如果要修改根,则需要对根的引用,而不是对具有根副本的局部变量的引用。
相关文章:
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 尽管遵循了规则,内存泄漏在哪里
- 为什么调用堆栈数组会导致内存泄漏
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 使用模板类的自定义列表类型中的内存泄漏
- 为什么以下C++代码中存在内存泄漏?
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 我是否生成线程并导致内存泄漏?
- 多线程程序中出现意外的内存泄漏
- 为什么此函数会导致内存泄漏?
- 在 C++ 库中使用cythonized python时内存泄漏
- 需要帮助查找内存泄漏
- 瓦尔格林德的内存泄漏使用新的
- 无法找出我的代码中的内存泄漏
- C++ 结构内部的unordered_map会导致内存泄漏问题吗?
- 可视化 使用 VS Code 查找C++应用程序中的内存泄漏
- Shared_ptr双链接列表内存泄漏
- C++ 在类中使用常量引用文本时 O2 内存泄漏