u011251379
mumumama1234
2015-08-24 07:48
采纳率: 75%
浏览 3.0k

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呢?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • a1193561652
    纵横车 2015-08-24 07:54
    已采纳

    m>512*512*512时a[m]是方问到了b数组吧。

    点赞 评论
  • devmiao
    devmiao 2015-08-24 07:51

    delete不会对数组清零,甚至你delete后还可以去访问数组(编译器不会检查)

    全局变量不一定要delete,或者用singleton封装下。

    点赞 评论
  • oyljerry
    oyljerry 2015-08-24 08:29

    既然你的new的数组一直需要使用,那么delete应该是在程序退出的时候再调用
    new分配的堆上数据,C++中只要你有地址,你都可以访问后面的地址,只不过里面的数据是不可预测的数据,什么都有可能。

    点赞 评论
  • yixianfeng41
    第2梦 2015-08-24 08:47

    数组a对应一段堆地址,在size内是数组的数据,size外就是其他边变量或对象的数据了;m>512*512*512时a[m]还是对应一个地址,只是这个地址保存的数据是别人的了。在最后一次用了数组后,就delete,然后等于0吧

    点赞 评论

相关推荐