如何解决双链表中的这些内存泄漏?
How to resolve these memory leak in Doubly Linked List?
我一直在尝试使用简单的删除 [] 名称删除内存泄漏,但我认为它没有成功删除,因为我仍然有内存泄漏。我还有一个 DeleteAll(( 函数,它遍历节点,但似乎不会删除对象名称。
下面的代码在add函数下,我认为这可能是我的内存泄漏的原因: 在 CDoublyLinkedList 类下
CListNode* work = NULL; // holds head
CListNode* prev = NULL; // previous
CListNode* newData = new CListNode(); // instantiation of node class
char* name = NULL; //char array for name
/// ________Increase array size of name depending on input
name = new char[strlen(iName) + 1];
/// ________Copy string to char
strcpy_s(name, strlen(iName) + 1, iName);
newData->SetName(name); // Set user input to character list
我的析构函数只包含同一类下的 delete all 函数
void DeleteALL()
{
CListNode* next;
CListNode* current;
current = head;
while(current != NULL) {
next = current->GetNext();
delete current;
current = next;
}
current = NULL;
head = NULL;
tail = NULL;
next = NULL;
}
这是我的主要:
CDoublyLinkedList element = new CDoublyLinkedList; //list object
Switch(option) {
/// ____Option Add name
case '1':
cout << "Enter name:" << "t";
cin >> temp;
/// ________If input is not 4-25 characters<br></br>
/// ____________Loop while input is not 4-25 characters<br></br>
/// ________________Ask for new input<br></br>
/// ____________End loop<br></br>
/// ________End if<br></br>
if((temp.length() >= 3) == false
|| (temp.length() <= 25) == false) {
while((temp.length() >= 3) == false
|| (temp.length() <= 25) == false) {
cout << "Input should be 3-25 characters. Try again." << "n";
cout << "Enter name:" << "t";
cin >> temp;
}
}
/// ________Add input to list
element->AddSortList(temp.c_str());
我通过以下方式删除了主方法上的对象:
if(element != NULL) {
delete[] element;
element = NULL;
}
类 CNode 仅包含 get 和 set
class CListNode
{
private:
CListNode* mNext; // Next item pointer
CListNode* mPrev; // Previous item pointer
char* mNameElement; // List element pointer
public:
/// <summary>
/// Node initializer to set as NULL
/// </summary>
/// <dt>Date:</dt>
/// 2019/10/03 Created by JAC.Tayag (SAT-A) TRAINING
CListNode()
{
mNext = NULL;
mPrev = NULL;
}
~CListNode()
{
CListNode* next;
CListNode* current;
current = mPrev;
while(current != NULL) {
next = current->GetNext();
delete current;
current = next;
}
current = NULL;
mNext = NULL;
mPrev = NULL;
next = NULL;
}
/// <summary>
/// Assign input name
/// </summary>
/// <dt>Date:</dt>
/// 2019/10/03 Created by JAC.Tayag (SAT-A) TRAINING
void SetName(char* iNameElement)
{
mNameElement = iNameElement;
}
/// <summary>
/// Assign next pointer
/// </summary>
/// <dt>Date:</dt>
/// 2019/10/03 Created by JAC.Tayag (SAT-A) TRAINING
void SetNext(CListNode* iNext)
{
mNext = iNext;
}
/// <summary>
/// Assign previous pointer
/// </summary>
/// <dt>Date:</dt>
/// 2019/10/03 Created by JAC.Tayag (SAT-A) TRAINING
void SetPrev(CListNode* iPrev)
{
mPrev = iPrev;
}
/// <summary>
/// Return input name
/// </summary>
/// <dt>Date:</dt>
/// 2019/10/03 Created by JAC.Tayag (SAT-A) TRAINING
char* GetName()
{
return mNameElement;
}
/// <summary>
/// Return next pointer
/// </summary>
/// <dt>Date:</dt>
/// 2019/10/03 Created by JAC.Tayag (SAT-A) TRAINING
CListNode* GetNext()
{
return mNext;
}
/// <summary>
/// Return previous pointer
/// </summary>
/// <dt>Date:</dt>
/// 2019/10/03 Created by JAC.Tayag (SAT-A) TRAINING
CListNode* GetPrev()
{
return mPrev;
}
您可以删除与单个链表相同的内容。
node* element = head;
while( element != 0 ) {
node* next = element->next;
delete element;
element = next;
}
head = 0;
相关文章:
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 尽管遵循了规则,内存泄漏在哪里
- 为什么调用堆栈数组会导致内存泄漏
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 使用模板类的自定义列表类型中的内存泄漏
- 为什么以下C++代码中存在内存泄漏?
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 我是否生成线程并导致内存泄漏?
- 多线程程序中出现意外的内存泄漏
- 为什么此函数会导致内存泄漏?
- 在 C++ 库中使用cythonized python时内存泄漏
- 需要帮助查找内存泄漏
- 瓦尔格林德的内存泄漏使用新的
- 无法找出我的代码中的内存泄漏
- C++ 结构内部的unordered_map会导致内存泄漏问题吗?
- 可视化 使用 VS Code 查找C++应用程序中的内存泄漏
- Shared_ptr双链接列表内存泄漏
- C++ 在类中使用常量引用文本时 O2 内存泄漏