cocos2d-xのCCFileUtils::getFileData()を使う際の注意(メモリリーク)

Pocket

cocos2dx

cocos2d-xの2.x系のお話です。CCFileUtilsにはファイルデータを扱う為のユーティリティーがたくさん集まっててcocos2d-xでデータを保存したり読み込みしたりでき便利なのですが、getFileData()を扱う際には注意しないとメモリリークしちゃうんで、メモで書いておきます。

getFileDataって?

まずはいつも通り、getFileDataに関しての簡単な説明を。

ただまあ読んで字のごとく、FileのDataをgetしてくれます。Resourceフォルダに入れたファイルなら、画像でもテキストデータでも取得できます。

CCFileUtils::sharedFileUtils()->getFileData(ファイル名,読み込みモード,サイズ)

サイズは適当に1024なり読み込む大きさに合わせてやっておくと、あとは
getFileDataにポインタを渡すことでセットしてくれます。

詳しい使い方はこんな感じです。

unsigned long fs = 1024;
//読み込みモードはr(テキスト)、rb(バイナリ)です。
unsigned char* text = CCFileUtils::sharedFileUtils()->getFileData("test.txt", "r", &fs);
std::string str((const char*)text , fs);

こうやると、strの中にテキストデータが入ってくれます。

内部的には、ただfopen()をし、ごにょごにょやって最後fclose()するという王道的なことをやってくれています。

ただ、これメモリリークします。

上記のコードだけの場合、実はこれメモリリークしちゃいます。
というのも、getFileData()の戻り値は、newしてるんですね。

なので、使い終わったら最後にdeleteしちゃいましょう。

delete[] text;

これで大丈夫ですね。
今回は短い投稿です。短い方が読みやすいですよね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です