new的时候系统会在某个地方记录长度的delete[]b的行为是未定义的,不要这么干soso (远道不可思) 在 ta 的帖子中提到:刚发现有这个版面,以后要多来灌水!本人刚开始学习C++不久,功底比较浅,希望各位大神不吝赐教!这两天在看RuminationsonC++,书中第四章提到delete[]删除数组的问题。在想,调用delete[]之后,计算机怎么知道要删除的数组元素有多少个呢?是在内存中一个一个检查吗?如果我定义了一个对象数组a[10],然后我让一个指针b指向第二个元素,再调用delete[]b,那么被删除的是从a[1]~a[9]的元素吗?
你这个a根本就不是new出来的soso (远道不可思) 在 ta 的帖子中提到:delete[]b,在析构函数中出现中断了下面是我的测试类,把new放在构造函数中。是说,在创建数组过程,调用了构造函数中的new,然后会把new的次数记录下来,和数组名保存在一起?codeclasstest{private:int*num;public:test(intIntValue=5)...........................
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