【cocos2d-x】UserDefaultでの書き込みでアクセス違反になる
Posted: 2016年10月23日(日) 16:46
[1] 質問文
[1.1] 自分が今行いたい事は何か
cocos2d-xにて、UserDefaultを使用し値を記録しようとして以下のコードを記述しました。
[1.2] どのように取り組んだか(プログラムコードがある場合記載)
[1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載)
これを実行したところ、userDefalt->setIntegerForKey("saveTime", mBaseTime);の行にブレークポイントをおいて止めた次のタイミングでエラーが発生しました。
エラーが示した行はtinyxml2.cppの
のif ( _lastChild ) {の行で、その時の出力は
というものでした。
[1.4] 今何がわからないのか、知りたいのか
少し前までは問題なく動いていたのに突然エラーが出るようになって動かなくなってしまいました。
新しいプロジェクトを作り、ソースを差し替えてデバッグしてみても同じでした。
どうすれば正しく動作するようになるのでしょうか。
[2] 環境
[2.1] OS : Windows, Linux等々
Windows 10
[2.2] コンパイラ名 : VC++ 2008EE, Borand C++, gcc等々
Microsoft Visual Studio Community 2015
Version 14.0.25431.01 Update 3
Microsoft .NET Framework
Version 4.6.01586
[3] その他
・どの程度C言語を理解しているか
c言語の基礎は大体理解しています。C++はクラスの作り方やコンテナクラスの利用まで、C++11はcocos2d-xで使うラムダ式くらいは把握しています。
・ライブラリを使っている場合は何を使っているか
cocos2d-xのv3-13-1を使っています。
[1.1] 自分が今行いたい事は何か
cocos2d-xにて、UserDefaultを使用し値を記録しようとして以下のコードを記述しました。
[1.2] どのように取り組んだか(プログラムコードがある場合記載)
bool GameScene::init() {
if (Layer::init() == false)
return false;
this->scheduleUpdate();
auto visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
auto userDefalt = UserDefault::getInstance();
/* 省略 */
//ベース時間の初期化
int saveTime = userDefalt->getIntegerForKey("saveTime");
if (saveTime) {
mBaseTime = saveTime;
} else {
mBaseTime = (int)time(NULL);
//時間を記録
userDefalt->setIntegerForKey("saveTime", mBaseTime);
userDefalt->flush();
}
/* 省略 */
return true;
}
これを実行したところ、userDefalt->setIntegerForKey("saveTime", mBaseTime);の行にブレークポイントをおいて止めた次のタイミングでエラーが発生しました。
エラーが示した行はtinyxml2.cppの
XMLNode* XMLNode::InsertEndChild( XMLNode* addThis )
{
if ( _lastChild ) {
TIXMLASSERT( _firstChild );
TIXMLASSERT( _lastChild->_next == 0 );
_lastChild->_next = addThis;
addThis->_prev = _lastChild;
_lastChild = addThis;
addThis->_next = 0;
}
else {
TIXMLASSERT( _firstChild == 0 );
_firstChild = _lastChild = addThis;
addThis->_prev = 0;
addThis->_next = 0;
}
addThis->_parent = this;
addThis->_memPool->SetTracked();
return addThis;
}
can not read xml file
cocos2d: fullPathForFilename: No file found at /cc_2x2_white_image. Possible missing file.
can not read xml file
can not read xml file
例外がスローされました:読み取りアクセス違反。
this が 0xCCCCCCCC でした。
[1.4] 今何がわからないのか、知りたいのか
少し前までは問題なく動いていたのに突然エラーが出るようになって動かなくなってしまいました。
新しいプロジェクトを作り、ソースを差し替えてデバッグしてみても同じでした。
どうすれば正しく動作するようになるのでしょうか。
[2] 環境
[2.1] OS : Windows, Linux等々
Windows 10
[2.2] コンパイラ名 : VC++ 2008EE, Borand C++, gcc等々
Microsoft Visual Studio Community 2015
Version 14.0.25431.01 Update 3
Microsoft .NET Framework
Version 4.6.01586
[3] その他
・どの程度C言語を理解しているか
c言語の基礎は大体理解しています。C++はクラスの作り方やコンテナクラスの利用まで、C++11はcocos2d-xで使うラムダ式くらいは把握しています。
・ライブラリを使っている場合は何を使っているか
cocos2d-xのv3-13-1を使っています。