访问冲突读取位置0xCDCDCDD1

Ayu*_*mka 0 c++ heap exception visual-studio-2013

我正在使用Visual Studio 2013.我收到Access violation reading location 0xCDCDCDD1错误.来自维基百科的参考文献:Magic Numbers,这里,这个问题告诉我,我正在使用未初始化的指针.我认为问题在于malloc我正在使用的功能,尽管在使用之前我确实参考过CPlusPlus文档.

我的代码:

#include "SingleNode.h"
#include "SingleList.h"
#include <iostream>
SingleList::SingleList() {}
SingleList::~SingleList() {}
...
    void SingleList::addHead(int value){
    ISingleNode *temp1 = (ISingleNode *)malloc(sizeof(SingleList));
    head = NULL;
    temp1->setValue(value);
    temp1->setNext(head->getNext());
    if (!head->getNext())
    {
        head = temp1;
    }
    else
    {
        temp1->setNext(head->getNext());
        head = temp1;
    }
}

    ...
Run Code Online (Sandbox Code Playgroud)

错误在行中 temp1->setValue(value);

setValue(int value)功能包括在这里:

#include "SingleNode.h"
SingleNode::SingleNode() {}
SingleNode::~SingleNode() {}
void SingleNode::setValue(int value){
    this->value = value;
}
int SingleNode::getValue(){
    return value;
}
ISingleNode * SingleNode::getNext(){
    return next;
}
void SingleNode::setNext(ISingleNode * next){
    this->next = next;
}
Run Code Online (Sandbox Code Playgroud)

SingleNode.h:

#pragma once
#include "Interfaces01.h"
class SingleNode :public ISingleNode{
private:
    int value;
    ISingleNode * next = NULL;
public:
    SingleNode();
    ~SingleNode();
    void setValue(int value);
    int getValue();
    ISingleNode * getNext();
    void setNext(ISingleNode * next);
};
Run Code Online (Sandbox Code Playgroud)

SingleList.h:

#pragma once
#include "Interfaces01.h"
class SingleList :public ISingleList{
private:
    int value;
    ISingleNode * head=NULL;
    ISingleNode * temp=NULL;
    ISingleNode * next=NULL;
    ISingleNode * temp1;
public:
    SingleList();
    ~SingleList();
    ISingleNode * getHead();
    void setHead(ISingleNode * head);
    void addHead(int value);
    void orderSort2();
    void orderSort3();
    void sequenceOrderSort();
    void reverse();
    ISingleNode * swap(ISingleNode * head, int k);
    ISingleNode * get_node(ISingleNode * head, int k);
};
Run Code Online (Sandbox Code Playgroud)

在断行时,调试器显示以下值:

Visual Studio 2013在断点处调试值

Pio*_*cki 5

  1. 更改:

    ISingleNode *temp1 = (ISingleNode *)malloc(sizeof(SingleList));
    
    Run Code Online (Sandbox Code Playgroud)

    成:

    ISingleNode *temp1 = new SingleList;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 您正在访问NULL指针:

    head = NULL; // set to NULL
    temp1->setValue(value);
    temp1->setNext(head->getNext()); // oops!
    
    Run Code Online (Sandbox Code Playgroud)

    你可能意味着:

    void SingleList::addHead(int value)
    {
        ISingleNode *temp1 = new SingleList;
        temp1->setValue(value);
        temp1->setNext(head);
        head = temp1;
    }
    
    Run Code Online (Sandbox Code Playgroud)