访问冲突读取位置0xcdcdcdd5

Access violation reading location 0xcdcdcdd5

本文关键字:0xcdcdcdd5 位置 读取 访问冲突      更新时间:2023-10-16

请看下面的代码。

GameComponent.h

#pragma once
#include<time.h>
#include "Position.h"
class GameComponent
{
public:
    GameComponent(int);
    GameComponent();
    ~GameComponent(void);
    virtual void update(const tm*);
    void addPosition(Position *p);
    friend class Position;
private:
    int id;
    Position *position;
};

GameComponent.cpp

#include "GameComponent.h"
#include <iostream>
#include <time.h>
#include "DrawableGameComponent.h"
#include "Position.h"
using namespace std;
GameComponent::GameComponent(int v):id(v)
{
}
GameComponent::GameComponent(){}

GameComponent::~GameComponent(void)
{
}
void GameComponent::update(const tm* time)
{
    cout << "ID : " << id << endl;
    cout << "Update: " << time->tm_hour << ":" << time->tm_min << ":" << time->tm_sec << endl;
    position->display();
    //Position::displayPositions();
}
void GameComponent::addPosition(Position *p)
{
    position = p;
    p->display();
    cout << "position working" << endl;
}

Position.h

#pragma once
class Position
{
    friend class GameComponent;
public:
    Position(int x, int y, int z);
    Position();
    ~Position();
    void display();
private:
    int x;
    int y;
    int z;
};

Position.cpp

#include "Position.h"
#include <iostream>
using namespace std;
Position::Position(int x, int y, int z)
{
    this->x = x;
    this->y = y;
    this->z = z;
}
Position::Position(){}

Position::~Position(void)
{
}
void Position::display()
{
    //cout << "Display Working" << endl;
    cout <<"Position " << " X: " << x << " Y: " << y << " Z: " << z << endl; 
}

首先,这不是完整的代码,这是发生错误的部分代码。当我运行代码时,我得到错误

Unhandled exception at 0x00302d90 in GameEngine.exe: 0xC0000005: Access violation reading location 0xcdcdcdd5.

指向输出区域(cout <<"X"& lt; & lt;........)的positiondisplay()方法(Visual Studio显示一个黄色数组指向该位置)。

我在谷歌上搜索了这个问题,发现这是因为空指针,它指向没有地方。GameComponentaddPosition()方法中有一个指针赋值(将指针参数赋给另一个指针)。

我相信错误来自那里。请帮我去掉这个错误

下面是我可以添加position ()

的位置

Test.cpp

元件套用* *组件;

void Test::add(GameComponent *gameComponent, Position *p)
{
        component[componentCount] = gameComponent;
        component[componentCount]->addPosition(p);
        componentCount++;

}

0xCDCDCDCD是MSVC在分配的内存周围放置的一个特殊值,用于在访问无效内存时提醒您(和调试运行时)。

因为你的地址是0x08高,我怀疑你添加到一个指针或数组,并试图解引用它。这可能是一个偏离1的错误,试图获取超过数组末尾的项,或者它可能是一个在释放后正在使用的对象。

我在谷歌上搜索了这个问题,发现这是因为空指针,它指向没有地方。在GameComponent的addPosition()方法中有一个指针赋值(将指针参数赋给另一个指针)。

检查,以确保该指针是有效的,不是0xCDCDCDCD或指向内存填充(或其他保护)值。如果编译器填充Position或插入虚函数表引用,则在解引用0xCDCDCDCD时,给出的段错误地址与X匹配。