gpt4 book ai didi

c++ - 读取访问冲突 0xCDCDCDCD

转载 作者:行者123 更新时间:2023-11-30 01:39:38 25 4
gpt4 key购买 nike

我不断收到读取访问冲突。这是我的代码。

class List
{
public:
List();
List(const List &copy);
~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();
}

最佳答案

Microsoft C++ 调试库使用常量 0xCD 来填充分配的堆 block 。因此,当您从尚未由您的代码初始化的动态堆对象中读取数据时,您可以看到模式 0xCDCDCDCD

您没有显示 Record 类定义,但我猜您的 Record::Record 构造函数未能将 next 指针设置为空指针。当迭代到达列表末尾时,您使用 getnext() 获取神奇的 0xCDCDCDCD 值。这是一个无效指针,因此您无法通过下一个 getnext() 调用访问位于 0xCDCDCDCD 的内存。

来源:

关于c++ - 读取访问冲突 0xCDCDCDCD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45205656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com