新人报到,and请教delete[]的问题

[复制链接]
查看11 | 回复8 | 2021-1-29 05:13:13 | 显示全部楼层 |阅读模式
刚发现有这个版面,以后要多来灌水!本人刚开始学习C++不久,功底比较浅,希望各位大神不吝赐教!这两天在看RuminationsonC++,书中第四章提到delete[]删除数组的问题。在想,调用delete[]之后,计算机怎么知道要删除的数组元素有多少个呢?是在内存中一个一个检查吗?如果我定义了一个对象数组a[10],然后我让一个指针b指向第二个元素,再调用delete[]b,那么被删除的是从a[1]~a[9]的元素吗?

回复

使用道具 举报

千问 | 2021-1-29 05:13:13 | 显示全部楼层

new的时候就记录在案了。
你可以试试delete[]b会有什么后果。
soso (远道不可思) 在 ta 的帖子中提到:刚发现有这个版面,以后要多来灌水!本人刚开始学习C++不久,功底比较浅,希望各位大神不吝赐教!这两天在看RuminationsonC++,书中第四章提到delete[]删除数组的问题。在想,调用delete[]之后,计算机怎么知道要删除的数组元素有多少个呢?是在内存中一个一个检查吗?如果我定义了一个对象数组a[10],然后我让一个指针b指向第二个元素,再调用delete[]b,那么被删除的是从a[1]~a[9]的元素吗?

回复

使用道具 举报

千问 | 2021-1-29 05:13:13 | 显示全部楼层
new的时候系统会在某个地方记录长度的delete[]b的行为是未定义的,不要这么干soso (远道不可思) 在 ta 的帖子中提到:刚发现有这个版面,以后要多来灌水!本人刚开始学习C++不久,功底比较浅,希望各位大神不吝赐教!这两天在看RuminationsonC++,书中第四章提到delete[]删除数组的问题。在想,调用delete[]之后,计算机怎么知道要删除的数组元素有多少个呢?是在内存中一个一个检查吗?如果我定义了一个对象数组a[10],然后我让一个指针b指向第二个元素,再调用delete[]b,那么被删除的是从a[1]~a[9]的元素吗?

回复

使用道具 举报

千问 | 2021-1-29 05:13:13 | 显示全部楼层
delete[]b,在析构函数中出现中断了下面是我的测试类,把new放在构造函数中。是说,在创建数组过程,调用了构造函数中的new,然后会把new的次数记录下来,和数组名保存在一起?
class test{
private:

int* num;
public:
test(int IntValue=5)
{
num=new int(IntValue);
}
~test()
{
delete num;
}
};
int main(){

test a[10];
test* b=a+1;
delete[] b; //bug!
return 0;
}

coolypf (CFC) 在 ta 的帖子中提到:new的时候就记录在案了。你可以试试delete[]b会有什么后果。

回复

使用道具 举报

千问 | 2021-1-29 05:13:13 | 显示全部楼层
你这个a根本就不是new出来的soso (远道不可思) 在 ta 的帖子中提到:delete[]b,在析构函数中出现中断了下面是我的测试类,把new放在构造函数中。是说,在创建数组过程,调用了构造函数中的new,然后会把new的次数记录下来,和数组名保存在一起?codeclasstest{private:int*num;public:test(intIntValue=5)...........................

回复

使用道具 举报

千问 | 2021-1-29 05:13:13 | 显示全部楼层
好像是这么回事……flfiiiu ((^_^)==(T.T)) 在 ta 的帖子中提到:你这个a根本就不是new出来的

回复

使用道具 举报

千问 | 2021-1-29 05:13:13 | 显示全部楼层

ft.
flfiiiu ((^_^)==(T.T)) 在 ta 的帖子中提到:你这个a根本就不是new出来的

回复

使用道具 举报

千问 | 2021-1-29 05:13:13 | 显示全部楼层

soso (远道不可思) 在 ta 的帖子中提到:delete[]b,在析构函数中出现中断了下面是我的测试类,把new放在构造函数中。是说,在创建数组过程,调用了构造函数中的new,然后会把new的次数记录下来,和数组名保存在一起?是和地址保存在一起,比如写到*((char*)a-8)这种地方codeclasstest{private:int*num;public:test(intIntValue=5){num=newint(IntValue);}~test(){deletenum;}};intmain(){testa[10];test*b=a+1;delete[]b;//bug!return0;}/code

回复

使用道具 举报

千问 | 2021-1-29 05:13:13 | 显示全部楼层
是我弄错了...
flfiiiu ((^_^)==(T.T)) 在 ta 的帖子中提到:你这个a根本就不是new出来的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行