ページ 11

【cocos2d-x】UserDefaultでの書き込みでアクセス違反になる

Posted: 2016年10月23日(日) 16:46
by はーむ
[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;
}
 [1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載)
これを実行したところ、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;
}
のif ( _lastChild ) {の行で、その時の出力は

コード:

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を使っています。

Re: 【cocos2d-x】UserDefaultでの書き込みでアクセス違反になる

Posted: 2016年10月24日(月) 13:24
by はーむ
userDefaultで使ってるファイルが壊れていたのか、パッケージ名を変えたらうまく動作しました。
お騒がせして申し訳ありませんでした。