【发布时间】:2015-03-27 14:12:50
【问题描述】:
我有一段代码:
#include<iostream>
using namespace std;
int main()
{
char * str = new char;
cin >> str;
cout << str;
delete str;
}
对比
#include<iostream>
using namespace std;
int main()
{
char * str = new char[30];
cin >> str;
cout << str;
delete []str;
}
当我使用 STDIN 向任一程序提供输入时,哪个程序可以确保没有内存泄漏?
当我们的教授告诉我们一个 char * 基本上等同于一个字符数组时,这个疑问就出现了。因此,如果我像第一种情况一样分配堆内存并让 str“保存”一个字符数组,如果我然后删除 str,它会完全删除数组吗?我知道第二种情况可以做到。
我已经经历过了->
delete vs delete[] operators in C++
因此我知道 delete[] 删除由 new[] 分配的内存,而 delete 对 new 执行相同的操作。但是如果 new 本身分配了连续的内存位置呢?
【问题讨论】:
-
两个sn-ps的代码都是错误的。:) 尝试编译成你将在你的帖子中使用的代码。
-
你开始得很好,但是当你得到问题的前提时 “现在,如果我提供一个字符串作为两个代码的输入”,你实际上并没有显示我们你在做什么......
-
“我们的教授告诉我们,一个 char * 基本上等同于一个字符数组”你的教授错了。
-
我刚刚做到了!它确实在 mac os x 10.9.5 上的 g++ 上编译
-
@Lightness Races in Orbit:对不起,我没有找到你。您能否详细说明我需要提供哪些信息?
标签: c++ arrays string new-operator delete-operator