删除动态分配内存

Deletion of Dynamically Allocated Memory

本文关键字:内存 动态分配 删除      更新时间:2023-10-16

我得到了一个任务,我需要在其中创建string_copy函数。注意,函数体和原型是由源代码提供的,需要维护。我写的部分在评论write your code here之后。

#include <iostream>
using namespace std;
int string_length(const char* string_c);
char* string_copy(const char* string_c);
int main()
{
    const char* string_c = "This is a string and is a long one so that we can create memory leaks when it is copied and not deleted";
    // write your code here
    int length = string_length(string_c);
    cout << "Copied String: " << string_copy(string_c) << endl;
    return 0;
}
int string_length(const char* string) {
    int length = 0;
    for (const char* ptr = string; *ptr != ''; ++ptr) {
        ++length;
    }
    return length;
}
char* string_copy(const char* string) {
    // we need to add 1 because of ’’
    char* result = new char[string_length(string) + 1];
    // write your code here (remember zero-termination !)
    int i;
    for (i = 0; string[i] != ''; ++i)
    {
        result[i] = string[i];
    }
    result[i] = '';
    return result;
}

现在任务告诉我

使用e=new TYPE分配的任何内存都是非常重要的(和a=new TYPE[size] with delete [] a)否则将导致错误。

不清楚错误是指compile/runtime error还是错误,因为在我的任务中没有满足要求错误。

我的问题是,在这段代码中,我如何删除中间动态创建的result数组?如果我删除了result,是不是就达不到任务的目的了?那么我如何尊重上面的报价,或者可能模拟long字符串常量中给出的内存泄漏?

谢谢。

编辑:为什么投反对票?请至少解释一下原因吧!我不是问任何解决方案或什么,但仅仅是建议,如果我错过了一些点或没有!

string_copy的调用者将负责通过调用delete[]来释放内存。

顺便说一下,这是一种编写c++代码的糟糕方式。你应该使用std::stringstd::vector<char>之类的。

原因如下:

int length = string_length(string_c);
char* copy = string_copy(string_c);
cout << "Copied String: " << copy << endl;
delete[] copy;
return 0;

恶心。

事实上,理想的解决方案是使用std::string而不是char *。在您的示例中,实际上并不需要用using char *代替std::string。与std::string:

  • 你不需要添加任何东西
  • 你不需要删除任何东西
  • 你可以用std::string做任何你用char *做的事情。