我在删除分配给下一个代码的内存时遇到了麻烦:
int main(){
char **cities;
cities = new char*[MAX_CITIES];
for(int i = 0; i < MAX_CITIES; i += 1){
cities[i] = new char[MAX_CITY_LENGTH];
cities[i] = "CITY"; //Its only a test value
}
cout << "Memory allocated successfully" << endl;
for(int i = 0; i < MAX_CITIES; i += 1){
cout << cities[i] << endl;
}
for(int i = 0; i < MAX_CITIES; i += 1){
delete[] cities[i];
}
delete[] cities;
cout << "Memory freed successfully" << endl;
return EXIT_SUCCESS;
}
我希望你能帮助我。谢谢。
最佳答案
问题就在这里:
cities[i] = "CITY"; //Its only a test value
这不复制CITY
进入你必须分配的内存。相反,它会用指向字符串文字“CITY”的指针覆盖指向您刚刚分配的内存的指针。
当您尝试删除它时,会出现问题,因为它不是用 new
分配的内存.由于您覆盖了指向您分配的内存的指针,它就会泄漏。
要使其正常工作,请替换 cities[i] = "CITY";
与 strcpy(cities[i], "CITY");
所以你将字符复制到你分配的内存中。
话虽如此,使用std::vector<std::string>
如果您在这件事上有任何选择。
关于c++ - 动态内存 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18995940/