问题描述
- c++,一个全局变量数组,在程序运行阶段,都要用到,什么时候进行delete[]?
-
在我的c++代码中,有3个全局变量的数组,假设分别为a[],b[],c[]
它们保存的是三维图像,所以size都不小,size=512*512*512;
我在头文件中声明,在.cpp文件初始化中有语句:
a=new int[size];
b=new int[size];
c=new int[size];
然后我的这个程序就是为了观察这三幅图像,也就是说程序运行后,用户会随时点击按钮显示这三幅图像中任一一幅图,也就是这时三个数组还都会被用到。之前我并没有delete掉这几个数组,对它们进行计算和修改也仅仅只针对数组的前512*512*512个元素
后来我在调试过程中发现当m>512*512*512时,a[m]居然有值,也就是说这个时候数组的大小已经大于new时候的size。
调查原因应该是因为只有new 而没有delete。可是我这种情况应该在何时delete[] a,b,c呢?
解决方案
m>512*512*512时a[m]是方问到了b数组吧。
解决方案二:
数组a对应一段堆地址,在size内是数组的数据,size外就是其他边变量或对象的数据了;m>512*512*512时a[m]还是对应一个地址,只是这个地址保存的数据是别人的了。在最后一次用了数组后,就delete,然后等于0吧
解决方案三:
delete不会对数组清零,甚至你delete后还可以去访问数组(编译器不会检查)
全局变量不一定要delete,或者用singleton封装下。
解决方案四:
既然你的new的数组一直需要使用,那么delete应该是在程序退出的时候再调用
new分配的堆上数据,C++中只要你有地址,你都可以访问后面的地址,只不过里面的数据是不可预测的数据,什么都有可能。
时间: 2024-07-28 15:00:32