动态内存C++

Dynamic Memory C++

本文关键字:C++ 内存 动态      更新时间:2023-10-16

我在删除分配的内存时遇到问题:

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>