delete mycar;    
mycar=NULL;
重复了
只要第一句就可以了

解决方案 »

  1.   

    没什么大问题,NULL前面强制转换一下
      

  2.   

    mycar都被你delete了,你再给它赋值当然会报错啦
    用 delete mycar就行了
      

  3.   

    兄弟门怎么都喝高了呀?!CCar *mycar;
    这是个指针啊,懂吗?!有什么情况下不可以
    mycar = NULL;原因很明显,你的类CCar有问题,它在内存使用的时候越界了,
    破坏了内存块的信息,导致delete无法知道该内存块的情况,如大小等!
      

  4.   

    前面的不要误人子弟
    delete mycar;    
    mycar=NULL;
    这样写非常正确,也是非常好的编码习惯,因为delete mycar;之后mycar就指向了无效的内存,一些书上叫野指针吧,如果这个时候再对mycar进行操作(比如再一次delete mycar),嘿嘿,天知道会发生什么.
    所以,要mycar=NULL;因为delete NULL 永远是正确的.
    to楼主,从你给出的代码我也看不错什么错误,需要更多代码了.
      

  5.   

    因为在VC++的Debug中,每分配一个内存块,都会加入4个Byte的0xFD,
    如果你越界了,那这4个Byte不是0xFD了,那VC++就会抱错了!
      

  6.   

    对,我估计也是我的类car有问题,,,,但它只是简单的派生于CObject,头文件如下:class CCar : public CObject
    {
    protected:
        
    DECLARE_SERIAL(CCar)            // Attributes
    public:
      int    DirectionInRoad;          //行驶方向  define east=1,south=2,west=3,north=4  
      int    WheelDirection;           //转弯方向 define  straight=0,left=1,right=2.
      double CurrentSpeed;             //当前车速;
      double CurrentX;                 //车的X位置;
      double CurrentY;                 //车的Y位置;
      double angle;                     //转弯时的角度
      bool   CarSize;                   //车型,(大/小)
      
     
    private:
      double CurrentAdd;               //当前加速度;
      double DelayAdd[2];              //贮存的延时的加速度值;(延时两个时间步)
      CPoint RP2LP(double x,double y); //转换到视图的逻辑坐标函数;
     
     // Operations
    public:
       CCar();     void  DrivingAsFollow(double Dis, double Speed);//按跟车规律行驶;      
       void  DrivingAsLinearAdd(double a);    //线性加速行驶;
       void  DrivingAsFree(double speed);     //匀速行驶;
       void  DrawCar(CDC* pDC);               //绘出;
    #ifdef _DEBUG
        virtual void Dump( CDumpContext& dc ) const;
    #endif
    virtual void Serialize(CArchive& ar);
    virtual void AssertValid();
    };
    究竟哪里出错了呢? 我真不知道。再帮我看看!怎样会导致内存越界?