SVolkov
@SVolkov

С++ ошибка работы с памятью?

Здравствуйте, я далек от дзена С++, да и мало читал по нему, на что и грешу.. и для меня честно говоря это необычная и загадочная ошибканя.

#ifndef MMUSICANTLAYER_H
#define MMUSICANTLAYER_H

#include "cocos-ext.h"
#include "../Common.h"
USING_NS_CC;

class MMusicantLayer : public Layer
{
public:
    CREATE_FUNC(MMusicantLayer);
    ~MMusicantLayer();
    bool onTouchBegan(Touch *touch, Event *event);
    void onTouchMoved(Touch *touch, Event *event);
    void onTouchEnded(Touch *touch, Event *event);
private:
    bool init();
    MMusicantLayer();
    Point* m_beginPoint;
};

#endif // MMUSICANTLAYER_H


#include "MMusicantLayer.h"

MMusicantLayer::MMusicantLayer()
{
    m_beginPoint = new Point(0,0);
}

MMusicantLayer::~MMusicantLayer()
{
    CC_SAFE_DELETE(m_beginPoint);

}

bool MMusicantLayer::init()
{
    if(!Layer::init())  {
        return false;
    }

    Object* it;
    CCARRAY_FOREACH(MGameState::getInstance()->getActiveTeam(), it) {
        MMusicant* musicant = static_cast<MMusicant*>(it);
        addChild(musicant);
    }

    CCARRAY_FOREACH(MGameState::getInstance()->getPassiveTeam(), it) {
        MMusicant* musicant = static_cast<MMusicant*>(it);
        addChild(musicant);
    }

    setTouchEnabled(true);

    return true;
}


bool MMusicantLayer::onTouchBegan(Touch *touch, Event *event)
{
    Point newLoc = touch->getLocation();
    m_beginPoint->setPoint(newLoc.x, newLoc.y);

    return true;
}


void MMusicantLayer::onTouchMoved(Touch *touch, Event *event)
{
    CCLOG("%lf %lf", m_beginPoint->x, m_beginPoint->y);
}


void MMusicantLayer::onTouchEnded(Touch *touch, Event *event)
{

}


#define CC_SAFE_DELETE(p)           do { delete (p); (p) = nullptr; } while(0)


valgrind показывает:
Invalid write of size 4 in MMusicantLayer::MMusicantLayer() in path/..../MMusicantLayer.cpp:5

В итоге программа выдает стек ошибки при завершении или же если записывать NULL в m_beginPoint (хотя при завершении тоже это происходит). Подобное поведение проявлялось и ранее, в других классах, но исчезало тоже непонятно.

В чем может быть проблема?

П.С.
Возможно важно: OS Ubuntu 13.0, x32, 8GB RAM, gcc версия 4.7.3
  • Вопрос задан
  • 2471 просмотр
Пригласить эксперта
Ответы на вопрос 1
@dmtrrr
Backend developer
Посмотрите что происходит в конструкторе класса Point
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы