我知道我应该使用std::vector
或其他替代方法,但有些东西我不明白指针。
当我们创建一个指针数组时:
int* a = new int[100];
它应该分配一个空间100 * sizeof(int)
,不是吗?
当我们不再需要它时,我们会:
delete [] a;
1.
这是错误的:
delete a;
但是当我实际这样做时(曾经在娱乐程序中意外),似乎没有触发运行时错误(与下面的第 3 部分不同)并且程序正常运行(尽管可能存在内存泄漏)。为什么?它实际上是否删除(释放)了数组的第一个元素?
2.
根据StackOverflow 上的一个问题,delete[]
知道它需要删除的数组的大小。
但是当我删除错误的东西时会发生什么?(它会导致运行时错误......它在 codepad.org 上显示memory clobbered before allocated block
以及Debug Assertion Failed
VS2010 中的某些内容。)为什么不直接删除(免费)元素 1 到 99?
delete [] &a[1]; // or
delete [] (a + 1);
3.
下面的代码也显示了memory clobbered before allocated block
. 但是为什么不直接删除(释放)元素 99?为什么它会导致错误,但delete a
就像第 1 部分一样?
delete &a[99]; //or
delete (a + 99);
C++ 标准是否真的说明了上述事情会发生什么?