【发布时间】:2014-08-22 17:57:19
【问题描述】:
int main()
{
char* a=new char[20];
cin>>a;
cout<<" character at 7-th position."<<a[6];
delete a+4;
cout<<a[0];
return 0;
}
输入:
1234567894567
输出:
character at 7-th position.6
*** glibc detected *** ./test free() invalid pointer:....
现在我有 3 个问题
-
delete a+4只会删除a+4处的字符是否正确? - 如果对前一个的回答是肯定的,那么
a[0]会发生什么。我们应该得到输出。 - 要删除一块内存,我们应该写
delete[]。但是在这种情况下,为什么所有的元素都被删除了?
【问题讨论】:
-
你不能“删除一个字符”。
-
那我怎样才能找回那段记忆呢??
-
我们可能应该对“C++ 删除运算符可以使用哪些指针值?”有一个规范的答案
-
呃,删除字符数组。你特别说“要删除一块内存,我们应该写 delete[]”。是的,这个。
-
当我要删除 a+4 时,内存已损坏,然后我们无法访问同一块的任何元素。是这样吗??
标签: c++ memory glibc delete-operator