Ошибка в очистке памяти
Появляется ошибка при очистке head в delStack(), и я не понимаю в чем проблема.
#include <iostream>
#include <vector>
#include <string>
using namespace std;
typedef struct {
string name;
int amount;
}Data;
struct Node {
Data info;
Node* next;
};
Node* head;
Node* addStack(Data add) {
Node* p;
p = new Node[sizeof(Node)];
if (p) {
p->info = add;
p->next = head;
head = p;
}
return p;
}
void printStack() {
struct Node* p;
cout << "======================\n";
p = head;
while (p != NULL) {
cout << p->info.name << "\t" << p->info.amount << endl;
p = p->next;
}
}
void delStack() {
Node* p;
p = head->next;
free(head);
head = p;
}
int main() {
Data s;
head = NULL;
for (int i = 0; i < 5; i++)
{
cin >> s.name;
cin >> s.amount;
if (!addStack(s)) {
cout << "Error of adding element in stack" << endl;
break;
}
}
printStack();
delStack();
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
У вас такая ядреная смесь французского (С++) с нижегородским (С), что проще исправить код и попросить вас разобраться, почему он исправлен именно так...
Одно смешение new и free, а равно неверное применение new чего стоит.
Кстати, код получился далеко не лучший, но тут я был ограничен вашей, так сказать, парадигмой.
#include <iostream>
#include <string>
using namespace std;
struct Data
{
string name;
int amount;
};
struct Node
{
Data info;
Node* next;
};
Node* head;
Node* addStack(const Data& add)
{
Node* p = new Node;
p->info = add;
p->next = head;
head = p;
return p;
}
void printStack()
{
Node* p = head;
cout << "======================\n";
while (p != nullptr)
{
cout << p->info.name << "\t" << p->info.amount << endl;
p = p->next;
}
}
void delStack(Node* p = head)
{
if (p == nullptr) return;
delStack(p->next);
delete p;
}
int main() {
Data s;
head = NULL;
for (int i = 0; i < 5; i++)
{
cin >> s.name;
cin >> s.amount;
if (!addStack(s)) {
cout << "Error of adding element in stack" << endl;
break;
}
}
printStack();
delStack();
}