删除动态分配的内存

时间:2016-11-05 22:10:39

标签: c++

我有一个任务,我需要创建string_copy函数注意函数体和原型是由源给出的,需要维护。我写的部分是在评论{throw null;}之后。

write your code here

现在任务告诉我

  

使用e = new TYPE分配的任何内存都非常重要   稍后发布删除e(和a =新TYPE [size] with delete [] a)   否则这将导致错误。

我的任务中的错误意味着#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 != '\0'; ++ptr) { ++length; } return length; } char* string_copy(const char* string) { // we need to add 1 because of ’\0’ char* result = new char[string_length(string) + 1]; // write your code here (remember zero-termination !) int i; for (i = 0; string[i] != '\0'; ++i) { result[i] = string[i]; } result[i] = '\0'; return result; } 或错误是否不符合要求错误并不完全清楚。

我的问题是,在此代码中如何删除中间动态创建的compile/runtime error数组?如果我删除了result,那么它不会达到任务目的吗?那么我如何尊重上面的引用或者模拟result字符串常量中给出的内存泄漏?

感谢。

编辑:为什么负面投票?请至少解释原因!我不是在问任何解决方案或其他什么,但仅仅是建议我是否遗漏了某些观点!

2 个答案:

答案 0 :(得分:2)

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;

呸。

答案 1 :(得分:1)

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

  • 你不需要新的东西
  • 您无需删除任何内容
  • 您可以使用st * :: string执行所有操作,使用char *。