我一直收到读访问权限。这是我的代码。
class List
{
public:
List();
List(const List ©);
~List();
/*List & operator=(const List &rhs);
Record * headPtr() const;
void setheadptr(Record * const newhead);
bool insertatfront(Record newdata);*/
void importcourselist();
void Loadmasterlist();
void storemasterlist();
Record *makenode(fstream &file);
Record *makenode(ifstream &file);
private:
Record *mHead;
Record *mEnd;
};
List::List()
{
mHead = nullptr;
mEnd = nullptr;
}
void List::storemasterlist()
{
ofstream outfile;
outfile.open("masterlist.txt");
mEnd = mHead;
while (mEnd->getnext()!= nullptr)
{
outfile << mEnd << endl;
mEnd = mEnd->getnext();
}
outfile << mEnd;
}
我不确定发生了什么但是,每次我尝试调试它时,它都会将我发送到指针的getter函数,如下所示:
Record *Record::getnext()
{
return mnext;
}
我相信我的错误在于我的导入功能。这是我正在创建额外的空节点。
void List::importcourselist()
{
ifstream infile;
string ptoken;
infile.open("studentlist.csv");
getline(infile, ptoken);
mHead = makenode(infile);
mEnd = mHead;
while (!infile.eof())
{
mEnd->setnext(makenode(infile));
mEnd = mEnd->getnext();
}
infile.close();
}
答案 0 :(得分:4)
Microsoft C ++调试库使用常量0xCD
来填充已分配的堆块。因此,当您从未被代码初始化的动态堆对象中读取数据时,您可以看到模式0xCDCDCDCD
。
您没有显示Record
类定义,但我猜您的Record::Record
构造函数未能将next
指针设置为nullptr
。当迭代到达列表末尾时,您可以使用0xCDCDCDCD
获取该魔术getnext()
值。这是一个无效指针,因此您无法通过下一次0xCDCDCDCD
调用getnext()
访问内存。
来源:
答案 1 :(得分:0)
这是一种猜测:
while(mEnd->getnext() ...)
mEnd->getnext()
,其中不会传递相同的结果;即它可能已经结束了。