c++ - 动态内存 C++

标签 c++ pointers memory-management new-operator

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

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/

相关文章:

TwinCAT 和 CoDeSys 中的指针和在线更改

c++ - C++中类的成员函数的内存空间是什么时候分配的?

c++ - C++中如何检查文件夹是否有写权限

c++ - 添加字符串时遇到问题... (c++)

c++ - gl_FragCoord 与 ivec2 转换

c++ - 取消引用空指针

c++ - 通过智能指针重置对象

haskell - GHC 在哪里分配外部内存以及垃圾收集器如何处理它?

c - free() 如何知道要释放多少内存?

c++ - 为什么 socket(PF_INET,SOCK_STREAM,0) 返回 -1?