0
C++で独自のLinkedListアプリケーションを作成しようとしています。今、私は助けが必要なところにくっついています。私のアプリケーションがアクセス違反のエラーを引き起こしていると私は理由を知りません。 何か助けていただければ幸いです。 liste - > remove(0)の後にメソッド "printList()"を削除すると(現在、このメソッドはリスト内のノードが1つしか使用されていません)、その作業はしていますが、出力を見たいです。メソッドprintList()をもう一度挿入すると、再びクラッシュします。ここでC++ LinkedList読み取りアクセス違反エラー
は私のコードです:あなたの '限られた範囲' で
LinkedList.cpp
#include "LinkedList.h"
#include <iostream>
LinkedList::LinkedList() {
head = NULL;
tail = NULL;
}
LinkedList::~LinkedList() {
std::cout << "Die Liste wurde aus dem Speicher gelöscht.";
}
int LinkedList::append(const char* text) {
//new Node
Node* node = new Node();
node->setData(text);
node->setNext(NULL);
//temp pointer
Node* tmp = head;
if (tmp == NULL) {
//List empty && set first node to head
head = node;
} else {
//list not empty, find the end of the list
while (tmp->getNext() != NULL) {
tmp = tmp->getNext();
}
tmp->setNext(node);
}
return 0;
}
int LinkedList::remove(int p) {
int counter = 0;
//temp pointer
Node* node = head;
delete node;
return 0;
}
void LinkedList::printList() {
Node* node = head;
if (node == NULL) {
std::cout << "Empty";
} else if (node->getNext() == NULL) {
//only one node in the list
std::cout << node->getData() << " --> NULL" << std::endl;
} else {
do {
std::cout << node->getData() << " --> ";
node = node->getNext();
} while (node != NULL);
std::cout << "NULL" << std::endl;
}
}
node.cpp
#include "node.h"
#include <iostream>
Node::Node() {
//NOTHING
}
Node::~Node() {
std::cout << "Node aus Speicher gelöscht.";
}
void Node::setData(const char* d) {
data = d;
}
void Node::setNext(Node* n) {
next = n;
}
const char* Node::getData() {
return data;
}
Node* Node::getNext() {
return next;
}
main.cppに
#include "LinkedList.h"
int main() {
LinkedList* liste = new LinkedList();
liste->printList();
liste->append("10");
liste->printList();
liste->remove(0);
liste->printList();
return 0;
}
あなたの 'remove'関数は正しく実装されていません。新しいヘッドを割り当てたり、削除する予定のものを検索せずに、各コールでヘッドノードを削除しています。 –
この削除機能は、より大きなリストでは機能しません。私の場合は、エラーの位置を突き止めるために1つの要素を扱うことしか意図していません。私は間違っていない場合は、私は動的に作成されたノードをすべての呼び出しで、頭ではなく削除していますか? – Tjatte
その場合、 'remove'メソッドで' head'ポインタをnull(好ましくはnullptr)に戻してください。 –