【发布时间】:2015-12-28 19:40:51
【问题描述】:
考虑以下代码:
int main()
{
int *intArPtr = new int[100];
int *intArPtr1 = intArPtr + 1;
delete [] intArPtr; //ok
//delete intArPtr; //valgrind warning, but no leaks!
//delete intArPtr1; //invalid pointer error
return 0;
}
我知道delete [] intArPtr 是删除此数组的唯一有效方法,但我只是对以下内容感到好奇:
- 为什么
delete intArPtr不会产生任何内存泄漏?是吗 未定义的行为,我很幸运没有任何行为? - 为什么
delete intArPtr1在运行时出现错误?为什么它不从数组中删除除第一个元素之外的所有元素? - C++ 的运行时如何知道分配数组的大小(对于 delete [])?它是否存储在某个地方?
【问题讨论】:
-
3.是的,分配数组的大小通常存储在指针之前的区域中。
-
1.和 2. 是的,这是未定义的行为
标签: c++ arrays memory-management memory-leaks heap-memory