Я изучаю связанные списки, и я думал, что правило состоит в том, что каждый new
должен отвечать delete
, чтобы очистить динамически распределенную память. Вот мой код, в котором я создаю 3 узла в списке, каждый раз создавая узел temp
с Node *temp = new Node;
в функции createNode
. У меня такой вопрос, разве это не динамически распределяется в куче, и мне нужно delete temp;
? Без этого мой код работает нормально, но когда я добавляю delete temp;
в конце функции, я получаю ошибку нарушения доступа для чтения. Разве это не должно иметь значения, так как temp
больше не используется после завершения функции? Надеюсь, что это имеет смысл, спасибо за вашу помощь.
#include <iostream>
#define Log(x) std::cout << x << std::endl;
struct Node
{
int data;
Node *next;
};
class SLList
{
private:
Node *head;
Node *tail;
public:
SLList()
{
head = NULL;
tail = NULL;
}
void createNode(int value)
{
Node *temp = new Node;
temp->data = value;
temp->next = NULL;
if (head == NULL)
{
head = temp;
tail = temp;
}
else
{
tail->next = temp;
tail = temp;
}
}
void printList()
{
Node *temp;
temp = head;
while (temp != NULL)
{
Log(temp->data);
temp = temp->next;
}
}
};
int main()
{
SLList list1;
list1.createNode(5);
list1.createNode(7);
list1.createNode(2);
list1.printList();
std::cin.get();
}