【问题标题】:Read access violation 0xCDCDCDCD读取访问冲突 0xCDCDCDCD
【发布时间】:2017-07-20 05:09:56
【问题描述】:

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

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();
}

【问题讨论】:

  • 请添加语言标签
  • 你写 mEnd-&gt;getnext() ,但 mEnd 可能为空
  • 更改您的代码,以免在空指针上执行-&gt;
  • while (mEnd-&gt;getnext()!= nullptr) -> while (mEnd)
  • 如果每个链表实现问题我都有一分钱!!!

标签: c++ pointers


【解决方案1】:

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

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

来源:

【讨论】:

    【解决方案2】:

    这是一种猜测:

    • 您为循环调用 while(mEnd-&gt;getnext() ...)
    • 然后在循环体中再次调用mEnd-&gt;getnext(),这不会提供相同的结果; IE。它可能已经结束了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-15
      • 2019-07-22
      • 1970-01-01
      • 1970-01-01
      • 2021-07-03
      相关资源
      最近更新 更多