首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

麻烦大家看看小弟我这个代码为何出现Access violation reading location 0x00000010.的异常

2013-01-11 
麻烦大家看看我这个代码为何出现Access violation reading location 0x00000010.的错误本帖最后由 superwa

麻烦大家看看我这个代码为何出现Access violation reading location 0x00000010.的错误
本帖最后由 superwavelet 于 2011-12-05 08:09:12 编辑 Shape类里面定义:

public:
const CoordinateSystem* parent() const { return parent_; }


CoordinateSystem类里面定义public函数:
Matrix3x3 CoordinateSystem::local_from_parent() const
    {
    Matrix3x3 m;
    m.assignIdentity();
    m.preScale(scale[0],scale[1]);
    m.preRotate(orientation);
    m.preTranslate(origin[0],origin[1]);//p e -1(right)
    
    Matrix3x3 InverseM=m.inverse();
    return InverseM;
    }


Matrix3x3类里面定义
void Matrix3x3::preScale(float x, float y)
    {
    Matrix3x3 m;
    m.assignScale(x,y);
    preMultiply(m);
    }


UnitDisk 类继承Shape类
class UnitDisk : public Shape  //UnitDisk 里面既没有申明parent()函数,也没有实现这个函数.

bool UnitDisk::contains (Point2 target_WCS)
    {
     target_LCS = (parent()->local_from_parent()); 
    }

我注意到 UnitDisk都是有已经生成了对象, parent()也有对应的对象,但是就是不知道 从为contains函数开始运行,啥运行到
   m.preScale(scale[0],scale[1]);这一行就出现 错误: 
Unhandled exception at exe: 0xC0000005: Access violation reading location 0x00000010.




[解决办法]
scale[2]没初始化或赋值吧
[解决办法]
下例s[2]的地址为0x00000010,此处的值比s[1]先入栈,但此地址无效,因为0到64k的地址范围是无效的,不能读。

你的scale[0],scale[1],scale[0]的地址分别为0x10,0x08,0x00

void f(float a,float b)
{
a+b;
}

int main()
{
double *s=0;
f(s[1],s[2]);  // Access violation reading location 0x00000010.

return 0;
}

[解决办法]
更正:你的scale[2],scale[1],scale[0]的地址分别为0x10,0x08,0x00

要得到s[2]的值,得去这个地址去取,地址无效,所以取不到值

热点排行