代码之家  ›  专栏  ›  技术社区  ›  Ross Anderson

将字符串复制到更大的字符数组中是否会导致内存泄漏?

  •  3
  • Ross Anderson  · 技术社区  · 14 年前

    char* a = "abcd"
    char* b = new char[80];
    
    strcpy(b, a);
    
    delete[] b;
    

    它会删除整个80个字符还是只删除strcpy复制到其中的4个字符?谢谢!

    5 回复  |  直到 14 年前
        1
  •  11
  •   Frédéric Hamidi    14 年前

    你把80字节分配到 b ,所以 delete[] 将释放80字节。你在这段时间里对阵列做了什么是无关紧要的。

    删除[]

    编辑: 正如其他人所指出的,自从 delete[] b; 而不是 delete b; . 有些实现可能会让你侥幸逃脱,但另一些则不会,而且仍然是错误的。

        2
  •  5
  •   GManNickG    14 年前

    内存泄漏是指没有释放内存。仅仅因为你分配了超过你所需要的,并不意味着它是一个内存泄漏。你的记忆力如何取决于你自己。

    delete [] b; ,或者你有未定义的行为,2)成为 std::string std::vector ,所以你不能同时管理和使用资源。

        3
  •  4
  •   Paul Rubel    14 年前

    但是,您确实需要调用 right delete operator

    最后一行应该是:

    delete[] b;
    

        4
  •  1
  •   Steve Townsend    14 年前

    因为这是标记C++,这里是C++版本-很好地理解内存管理。 new/delete ,但最好避免使用RAII手工操作。

    #include <string>
    #include <iostream>
    using namespace std;
    
    int main()
    {
        string a("abcd");
        string aCopy(a);
        cout << aCopy << endl;
    
        const char* b(aCopy.c_str());
        cout << b << endl;
    }
    
        5
  •  0
  •   Community Neeleshkumar S    7 年前

    你发布的代码坏了。请查看此线程: What is the array form of 'delete'?