C++でメモリリークしている箇所がわからない
C++を学習中にLinkedListを作成してみたのですが、メモリリークが起きてしまい、解決方法がわかりません。いろいろ試してはみたのですが、どうしてもわからないのでご教授いただければ幸いです。
追記:
信用度が足りずコメントができないのでこちらから失礼いたします。ご回答ありがとうございます。メモリリークしているのかもと思ったのはログで普段は出てこなかった The thread 0x6734 has exited with code -1073741510 (0xc000013a).が出てきたためなのですが、いま改めて確認してみたら、メモリリークがある場合はDetected memory leaks!と出るのですね。まったくの勘違いでした。ありがとうございました。Insertの実装についても、調べてみます。
// LinkedList.cpp : Defines the entry point for the console application.
//
#define _CRTDBG_MAP_ALLOC #include <stdlib.h> #include <crtdbg.h>
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class Node {
int data;
class Node* next;
public:
Node(int param) {
data = param;
next = nullptr;
}
~Node() {
if (next != nullptr)
next = nullptr;
}
void SetData(int param) {
this->data = param;
}
int GetData() {
return this->data;
}
void SetNext(Node* param) {
this->next = param;
}
Node* GetNext() {
return this->next;
}
};
class LinkedList {
private:
Node* head = nullptr;
Node* tail = nullptr;
public:
LinkedList() {}
~LinkedList() {
Node* node = head;
while (node != nullptr) {
Node* next = node->GetNext();
delete node;
node = next;
}
}
void Add(int value) {
if (head == nullptr) {
head = new Node(value);
tail = head;
}
else {
Node* next = new Node(value);
tail->SetNext(next);
tail = next;
}
}
bool Insert(int value, int index) {
Node* node = head;
if (index == 0) {
Node* target = new Node(value);
target->SetNext(head);
head = target;
return true;
}
for (int i = 0; i < index-1; i++) {
if (node == nullptr) {
return false;
}
Node* next = node->GetNext();
if (next == nullptr) {
break;
}
node = node->GetNext();
}
Node* target = new Node(value);
target->SetNext(node->GetNext());
node->SetNext(target);
return true;
}
void Print() {
Node* node = head;
while (node != nullptr) {
cout << node->GetData() << endl;
node = node->GetNext();
}
}
};
int main()
{
LinkedList* li = new LinkedList();
li->Add(1);
li->Add(2);
li->Add(3);
li->Insert(0, 0);
li->Insert(7, 2);
li->Print();
delete li;
_CrtDumpMemoryLeaks();
getchar();
return 0;
}