0

我在删除使用下一个代码分配的内存时遇到了麻烦:

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;
}

我希望你能帮助我。谢谢。

4

1 回答 1

3

问题就在这里:

cities[i] = "CITY"; //Its only a test value

这不会复制CITY您必须分配的内存中。相反,它会用指向字符串文字“CITY”的指针覆盖指向您刚刚分配的内存的指针。

当您尝试删除它时,会出现问题,因为它不是分配给new. 由于您覆盖了指向您分配的内存的指针,它只会被泄露。

要使其工作,请替换cities[i] = "CITY";为,strcpy(cities[i], "CITY");以便将字符复制到分配的内存中。

话虽如此,std::vector<std::string>如果您对此事有任何选择,请使用。

于 2013-09-25T04:00:20.593 回答