Здравствуйте, я далек от дзена С++, да и мало читал по нему, на что и грешу.. и для меня честно говоря это необычная и загадочная ошибканя.
#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