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