+ -
当前位置:首页 → 问答吧 → 麻烦大家看看我这个代码为何出现Access violation reading location 0x00000010.的错误

麻烦大家看看我这个代码为何出现Access violation reading location 0x00000010.的错误

时间:2011-12-05

来源:互联网

Shape类里面定义:
C/C++ code
public:
const CoordinateSystem* parent() const { return parent_; }


CoordinateSystem类里面定义public函数:
C/C++ code
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类里面定义
C/C++ code
void Matrix3x3::preScale(float x, float y)
    {
    Matrix3x3 m;
    m.assignScale(x,y);
    preMultiply(m);
    }


UnitDisk 类继承Shape类
C/C++ code
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.



作者: superwavelet   发布时间: 2011-12-05

发现和 preScale 函数有关

一旦我把m.preScale(scale[0],scale[1]); 换成
m.preScale(1,2); 就没错了

在 CoordinateSystem 里面定义 public float scale[2];

为何这个数组不能访问?

怪了

作者: superwavelet   发布时间: 2011-12-05

scale[2]没初始化或赋值吧

作者: quwei197874   发布时间: 2011-12-05

引用 2 楼 quwei197874 的回复:

scale[2]没初始化或赋值吧


初始化了,赋值了

作者: superwavelet   发布时间: 2011-12-05

引用 2 楼 quwei197874 的回复:

scale[2]没初始化或赋值吧


对,是没有初始化,刚查出来了.

问题是,即使没有初始化, scale[2]也有随机的值啊? 为何出现
Access violation reading location 0x00000010. 的错误?

作者: superwavelet   发布时间: 2011-12-05

求解? ....

作者: superwavelet   发布时间: 2011-12-25