答案:这样删不可以的.
for(int i = 0; i != 10; ++i)
delete Number[i];
new的是什么, delete的就是什么, new 了10次, delete也要10次,
你分配的时候是Number[i] = new short; 删除时相反.
因为Number是一个数组, Number[0~~9]才是保存动态内存的指针.
因为数组有的时候会被当做指针, 所以编译时语法检查可以通过. 但是运行会有错误
其他:发现你的程序中
delete []Number;
改成
delete *Number;
这样也不报错了,就是不明白怎么回事。
是不是因为Number是一个指针数组,其中存的都是地址,这些地址中的内容是new short()得到的值,所以Number[i]输出的是Number中存的元素值(其实是地址),而*Number[i]得到的是这些地址值中存的内容。
所以删除时
delete *Number;才代表删除Number数组的起始地址,所以才不报错? 已经有人回答了,必须for来删除。
但是,还有细微的地方:
你这Number本身不是new出来的,所以不能delete,但是:
Number[0] 或者 *Number 是new出来的
Number[1] 或者 *(Number+1) 是new出来的
……
Number[9] 或者 *(Number+9) 是new出来的
所以,可以delete上述10个,少delete是内存泄露。delete除上述10个以外或者其他等价形式会出错。
上一个:用调用交换两个整型变量的值,求找错
下一个:C语言编程题:1至4个for语句循环的例题,并注释意义,望高手回答