q****x 发帖数: 7404 | 1 从那个删除重复元素的数组问题想到的。怎么回收被删掉元素的空间?下面这样不行。
int main()
{
char* cp = new char[10];
char* cp2 = cp + 2;
delete [] cp2;
delete [] cp;
} |
S**I 发帖数: 15689 | 2 undefined behavior
【在 q****x 的大作中提到】 : 从那个删除重复元素的数组问题想到的。怎么回收被删掉元素的空间?下面这样不行。 : int main() : { : char* cp = new char[10]; : char* cp2 = cp + 2; : delete [] cp2; : delete [] cp; : }
|
l*****a 发帖数: 14598 | 3 delete [] cp
之所以工作是因为分配空间时系统 在cp处记录了所分配空间的size
对于cp2 没有定义这样的信息,所以属于未定义行为
【在 q****x 的大作中提到】 : 从那个删除重复元素的数组问题想到的。怎么回收被删掉元素的空间?下面这样不行。 : int main() : { : char* cp = new char[10]; : char* cp2 = cp + 2; : delete [] cp2; : delete [] cp; : }
|
A**u 发帖数: 2458 | 4 不对
应该是cp那个地址,有一个额外的内存 存储 size
【在 l*****a 的大作中提到】 : delete [] cp : 之所以工作是因为分配空间时系统 在cp处记录了所分配空间的size : 对于cp2 没有定义这样的信息,所以属于未定义行为
|
l*****a 发帖数: 14598 | 5 就是那个意思
不过你这个‘额外的内存,展开说说吧
【在 A**u 的大作中提到】 : 不对 : 应该是cp那个地址,有一个额外的内存 存储 size
|
A**u 发帖数: 2458 | 6 记得看effective c++上讨论 deletel delete[],
画了个 delete[]的内存分布
[size][0][1][2][3]
这样子的.
【在 l*****a 的大作中提到】 : 就是那个意思 : 不过你这个‘额外的内存,展开说说吧
|
K*****k 发帖数: 430 | 7 如果我用指针操作改写size的值,是否回收会出错?
另外VC下我看过数组首元素附近的内存,没有一个的值是size
【在 A**u 的大作中提到】 : 记得看effective c++上讨论 deletel delete[], : 画了个 delete[]的内存分布 : [size][0][1][2][3] : 这样子的.
|
A**u 发帖数: 2458 | 8 你不可能看到.
compiler实现.
【在 K*****k 的大作中提到】 : 如果我用指针操作改写size的值,是否回收会出错? : 另外VC下我看过数组首元素附近的内存,没有一个的值是size
|
q****x 发帖数: 7404 | 9 应该是记在mem allocator里。调用delete[]时查一下当时这块地址分配大小。
【在 K*****k 的大作中提到】 : 如果我用指针操作改写size的值,是否回收会出错? : 另外VC下我看过数组首元素附近的内存,没有一个的值是size
|