我開始研究算法和數據結構。我決定嘗試使用單向鏈表。它包含了像選擇元素之後插入元素,刪除具有給定值的元素並返回一定數量的已刪除項目等功能,函數返回列表和類的當前內容以寫入和讀取/讀取文件。功能上有一個小問題,它必須添加新元素。調試器返回以下錯誤:C++中的單向鏈表
AiSD.exe中0x00e71ea2的第一次機會異常:0xC0000005:訪問衝突讀取位置0x00000000。
AiSD.exe中的0x00e71ea2未處理的異常:0xC0000005:訪問衝突讀取位置0x00000000。
看起來像指針問題,但我不知道如何解決它。現在不是我的專業......然而!所以我請你幫助我。有一個代碼:當你進入AddAfter方法
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
struct Node
{
Node *next;
int key;
};
class List
{
public:
Node *head;
unsigned int counter;
List()
{
head = NULL;
counter = 0;
}
unsigned size(Node *p)
{
unsigned int c=0;
while(p)
{
c++;
p = p->next;
}
return c;
}
void Addafter(Node *e, int v)
{
Node *p = new Node;
p->next = e->next; //there's a problem
p->key = v;
e->next = p;
}
int Delete(int v)
{
Node *p = new Node;
int count = 0;
while(p->next != NULL)
{
if(p->key = v)
{
delete p;
count++;
return count;
}
}
}
void Write()
{
string data;
fstream file;
file.open("D:\\plik2.txt", ios::out);
Node *p = head;
while(p->next != NULL)
{
p = p->next;
int wartosc = p->key;
file<<wartosc;
}
file.close();
}
void Read()
{
string data;
fstream file;
file.open("D:\\plik.txt", ios::in);
Node *p = head;
for(int i=0; i<counter; i++)
{
getline(file, data);
int result = atoi(data.c_str());
p->key = result;
p = p->next;
}
file.close();
}
};
int main()
{
List a;
a.Read();
a.Addafter(a.head, 3);
a.Delete(5);
a.size(a.head);
system("PAUSE");
return 0;
}
可以通過將標題添加到標題中來指明所使用的語言嗎?請在類別中標記它? –
像「這是一些代碼,修復我的錯誤」這樣的問題不適合Stackoverflow問答格式。你必須把它縮小到一個特定的問題,如果在找到錯誤的行時仍然沒有得到它 - 在使用指針時搜索關於訪問衝突的舊回答。 (通常,在爲它分配一個您擁有的對象的地址之前,不要對指針取消引用)。 – folkol
我會知道下一次 –