Pea*_*Gen 1 c++ pointers visual-studio-2010
请查看以下代码.
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;
};
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
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;
};
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
首先,这不是完整的代码,这是发生错误的代码的一部分.当我运行我的代码时,我得到了错误
Unhandled exception at 0x00302d90 in GameEngine.exe: 0xC0000005: Access violation reading location 0xcdcdcdd5.
Run Code Online (Sandbox Code Playgroud)
它指向的输出区域(COUT <<"X" << ........)display()
的方法position
(Visual Studio中示出了黄色的阵列指向那个地方).
我搜索了这个问题,发现这是因为空指针,它指向没有位置.有一个指针内分配(分配指针参数到另一个指针)GameComponent
的addPosition()
方法.
我相信错误来自那里.请帮我摆脱这个错误
更新
以下是我可以添加addPosition()的位置
TEST.CPP
GameComponent**组件;
void Test::add(GameComponent *gameComponent, Position *p)
{
component[componentCount] = gameComponent;
component[componentCount]->addPosition(p);
componentCount++;
}
Run Code Online (Sandbox Code Playgroud)
0xCDCDCDCD
是MSVC在分配的内存周围放置的特殊值,用于在访问无效内存时提醒您(以及调试运行时).
由于您的地址高出0x08,我怀疑您正在添加指针或数组并尝试取消引用它.这可能是一个一个错误,试图抓住一个超过数组末尾的项目,或者它可能是一个在重新分配后使用的对象.
我搜索了这个问题,发现这是因为空指针,它指向没有位置.在GameComponent的addPosition()方法中有一个指针指定(将指针参数指定给另一个指针).
检查以确保此指针有效且不是0xCDCDCDCD
或指向充满该(或其他防护)值的内存.如果编译器填充Position
或插入vtable引用,则segfault中给出的地址与X
解除引用时的位置相匹配0xCDCDCDCD
.
归档时间: |
|
查看次数: |
1958 次 |
最近记录: |