gpt4 book ai didi

c++ - 使用 delete [] 删除由 new [] 创建的数组

转载 作者:行者123 更新时间:2023-11-30 02:28:20 25 4
gpt4 key购买 nike

<分区>

考虑以下代码:

#include <iostream>
#include <limits>
using namespace std;


struct my{
int a;
~my(){
cout << "d\n";
}
};
int main(){
my* a = new my[100];
// cout << (void*)a << " " << (void*)&(a[0]) << endl;
delete a; // I know I should use delete [],
// but just to find out what would happen if I do this.
}

程序正在打印 d,然后给出一个段错误。 delete 的实现假设已经分配了一个大小为 sizeof(type) 的区域并且必须释放那么多内存。而 delete [] 首先读取已分配的元素数。我发现大多数实现都将这个数字 n 存储在分配内存的开头。 delete [] 从开头获取 n 并继续释放 n * sizeof(type) 字节的已分配内存。我不明白为什么上面的程序会出现段错误。我尝试打印地址 a&(a[0]) 并且它们完全相同,因此 delete 试图删除的任何可能性清除存储 n 的区域是不正确的。有人可以告诉我发生了什么事吗?

注意:当我们分配intdouble 等基本类型的数组时,这不会发生

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com