删除动态分配内存
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 != ' '; ++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[]
来释放内存。
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;
恶心。
事实上,理想的解决方案是使用std::string
而不是char *
。在您的示例中,实际上并不需要用using char *
代替std::string
。与std::string
:
- 你不需要添加任何东西
- 你不需要删除任何东西
- 你可以用std::string做任何你用char *做的事情。
相关文章:
- 对具有动态分配的内存和析构函数的类对象的引用
- 调用析构函数以释放动态分配的内存
- 在运行时为动态分配的内存输入值
- 释放动态分配的内存时是否需要执行此额外步骤
- 动态分配字符数组的内存
- 销毁C++中动态分配的内存(数组对象)
- 删除类成员的动态分配内存的最佳方法是什么
- 动态分配的内存构造函数
- 为什么动态分配的内存总是16字节对齐
- 如果您为类的一个对象动态分配内存作为参数,会发生什么
- 为什么动态分配的两个变量的内存位置不是连续的?
- 为浮点数组动态分配内存
- 动态分配 8 字节的内存
- 包含动态分配内存作为值的映射的取消定位速度有多快?
- STD分配器是否会在堆上动态分配内存?它可以安全地删除内存吗?
- 为什么不能在 Visual C++ 中动态分配堆栈内存?但海湾合作委员会可以做到
- 在C 中动态分配的内存的问题
- 为什么在 C++ 执行删除操作后仍可以访问释放的动态分配的内存
- 对内存动态分配的类不使用"*"的逻辑
- 如果我将内存动态分配给静态变量,我应该释放它还是会自动释放它