私はC++のメモリ管理に比較的慣れていないので、ヒープの破損という奇妙なエラーが発生します(さらに、その前のVisual Studioの自動ブレークポイントも発生します)。問題のあるコードは次のとおりです。
z_world::z_world(char* name)
{
unsigned int i, skip;
char tmp;
//Load data from file
std::string* data = loadString(name);
//Base case if there is no world data
tiles = NULL;
w = 0;
h = 0;
if(data->length() > 0) {
//Set up the 'tiles' array
for(i = 0; i < data->length(); i++) {
if(data->at(i) == '\n')
h++;
if(h == 0)
w++;
}
tiles = new int[data->length()-h];
//Load Data
skip = 0;
for(i = 0; i < data->length(); i++) {
if(data->at(i) == '\n') {
skip++;
printf("\n");
continue;
}
tmp = data->at(i);
tiles[i+skip] = atoi(&tmp);
printf("%i ",tiles[i+skip]);
}
}
delete data;
}
これが私が文字列にロードする場所です:
std::string* loadString(char* name)
{
ifstream in(name);
std::string* input = new string();
while(in) {
std::string line;
getline(in,line);
input->append(line);
input->append("\n");
}
in.close();
return input;
}
「deletedata;」内にブレークポイントとエラーが発生し、「data」がその前のどこかで削除されたように思われますが、どこで削除されるかわかりません。参考までに、このメソッドは、仮想2D整数配列(タイルのID用)の形式でゲームのワールドデータを含むオブジェクトを作成することです。