繁体   English   中英

删除动态分配的内存

[英]Deletion of Dynamically Allocated Memory

我已经完成了一个任务,需要创建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 != '\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;
}

现在任务告诉我

重要的是,稍后用delete e释放分配给e = new TYPE的所有内存(以及使用delete [] a释放a = new TYPE [size]),否则将导致错误。

目前尚不清楚错误是指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;

uck

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

  • 你不需要新的东西
  • 您无需删除任何内容
  • 您可以使用std :: string来完成所有操作,就像使用char *一样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM