c++,一个全局变量数组,在程序运行阶段,都要用到,什么时候进行delete[]?

问题描述

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

c++,一个全局变量数组,在程序运行阶段,都要用到,什么时候进行delete[]?的相关文章

c++-//编写一个程序,最多将10个donation值读入到一个double数组中。

问题描述 //编写一个程序,最多将10个donation值读入到一个double数组中. #include int main() { using namespace std; int donation; double average; int sum; int c,i; for(i=1;i<=10;i++) { while(isdigit(donation)) cout<<"Enter "< cin>>donation[i]; sum+=donati

bug-急,我用vs2013向导建立了一个默认程序,但无论如何怎样修改资源里的程序快捷键,都没用

问题描述 急,我用vs2013向导建立了一个默认程序,但无论如何怎样修改资源里的程序快捷键,都没用 如题. 这个是什么回事呢? 本来打开程序是 CTRL+o ,打开一个文档,但我把这个快捷键改为 "F5",运行后, 还是CTRL+O. 那个F5没反应. 这是什么回事?是vs2013里VC的BUG吗? 解决方案 点击工具,然后选择keyboard然后找到需要设置的快捷键,自定义快捷键输入后,一定要点击(分配,分派)按钮,然后点击OK, 然后clear,build 就OK了 (我用的是日版

每一个程序员都应该知道的高并发处理技巧、创业公司如何解决高并发问题、互联网高并发问题解决思路、caoz大神多年经验总结分享

原文:每一个程序员都应该知道的高并发处理技巧.创业公司如何解决高并发问题.互联网高并发问题解决思路.caoz大神多年经验总结分享 本文来源于caoz梦呓公众号高并发专辑,以图形化.松耦合的方式,对互联网高并发问题做了详细解读与分析,"技术在短期内被高估,而在长期中又被低估",而不同的场景和人员成本又导致了巨头的方案可能并不适合创业公司,那么如何保证高并发问题不成为创业路上的拦路虎,是每一个全栈工程师.资深系统工程师.有理想的程序员必备的技能,希望本文助您寻找属于自己的"成金之

顽石互动CEO吴刚:程序员都有一个创业梦想

投资界11月3日消息,2011中国http://www.aliyun.com/zixun/aggregation/36233.html">移动开发者大会今日在京召开,顽石互动董事长兼CEO吴刚认为,节奏感掌握是一个公司特别重要的环节,很多公司因为一个市场大机会的来临,经常让自己顶上去马上抓这样的机会,往往在这样的前提下很多公司把自己本身节奏感打破掉.他还预计,到了2013年.3721.html">2014年,移动互联网游戏可能会跟今天的PC网游市场相似的. 以下为演讲实录

c语言,为什么我定义了一个全局变量,总是会自动变为零?

问题描述 c语言,为什么我定义了一个全局变量,总是会自动变为零? #include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> #include<conio.h> int score=0,move=0,a[4][4]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},temp[5],highest_score=0; void print(void

c++-设计一个完整的C++程序

问题描述 设计一个完整的C++程序 设计一个完整的C++程序,把某个班的学生信息保存在磁盘文件中.学生信息包括学号.姓名.电话号码.QQ号.E_mail和家庭地址,以二进制的形式存放到磁盘中.从磁盘中读取出来,并显示在屏幕上,然后输入学生的QQ号,查找是否有该学生信息,有则显示该学生信息,无则显示查找失败. 解决方案 啥意思?命题作文??? 解决方案二: c#我倒是会一点,但是C++写真不会 解决方案三: 定义一个相应的结构体数组,把数据从文件读到数组中,再自定义一个打印函数和查找函数,我记得我

《ANTLR 4权威指南》——3.4 构建一个语言类应用程序

3.4 构建一个语言类应用程序 我们继续完成能够处理数组初始化语句的示例程序,下一个目标是能够翻译初始化语句,而不仅仅是能够识别它们.例如,我们想要将Java中,类似{ 99, 3, 451 }的short数组翻译成"\u0063\u0003\u01c3".注意,其中十进制数字99的十六进制表示是63. 为了完成这项工作,程序必须能够从语法分析树中提取数据.最简单的方案是使用ANTLR内置的语法分析树遍历器进行深度优先遍历,然后在它触发的一系列回调函数中进行适当的操作.正如我们之前看到

一个关于数组溢出的问题,请大神帮小弟解惑

问题描述 一个关于数组溢出的问题,请大神帮小弟解惑 vc6.0环境,代码很简单,但是不管你输入的数组n是多大,a[n]的值都是n,按理说不是最大就到n-1了吗,为什么不报错? #include using namespace std; int main() {int i;int a[11]; int*p=a; for(i=0;i<=10;i++) a[i]=i; cout<<a[11]; return 0; } 解决方案 你试试int *a = new int[11];数组实际上放在栈内

关于linux写时复制的一个疑问,C程序

问题描述 关于linux写时复制的一个疑问,C程序 linux写时复制的机制就是,当fork出一个子进程的时候,子进程并不立刻复制数据段,而是当子进程要修改数据时才分配相应内存给变量.按照这样的原理,我用C写了一个程序,声明一个全局变量并初始化,然后在进程里fork出一个进程,这时在父子进程输出全局变量的地址都是一样的,我在子进程修改变量值后,同样在父子进程输出变量地址,却地址还是一样的!这到底是为什么?写的时候不是要分配内存的吗?怎么地址值还是一样!路过的朋友帮我解解惑ˊ_>ˋ 解决方案 你这