我对 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;
}
我在“删除数据”中得到了断点和错误;这让我认为“数据”在此之前的某个地方被删除了,但我找不到它会在哪里。作为参考,此方法是创建一个包含游戏世界数据的对象,该对象以虚拟 2D 整数数组的形式(用于图块的 ID)。