一、遇到的问题
1)情景说明:
我在一个类中定义了一个全局变量a,然后在类初始化的时候给该变量赋一个初始值a=10。该变量有被其他类外部引用,但是外部引用只是使用该值,并没有修改该值。然后在一个Timer中每秒打印这个变量1次。
2)看到的现象:
该变量a期初一直输出10,在突然的某一时刻,该值变成了 0
二、我所想到的问题的原因
我看到这种现象后,脑子不加思索的就想到以下两种原因:
1)肯定有人改变变量a的值。
答案是肯定的,只是在那个类初始化的时候给变量赋一次值,其它地方均没有。
2)要么是拥有该变量的对象被销毁了,所以其值就变成0了。
答案是很明显的,自习读题目就能发现,这种现象不可能发生,因为它是一个全局变量,不属于哪一个对象。
三、真正的原因
是由于其它线程中的某个对象malloc堆内存空间时,把全局区的变量的地址给占用了。。也就是堆空间把全局变量区的部分地址给占用了。
对此,我们做了一个测试:
char mycha[1024*10]; // 声明10K的空间
double a;
init(){
a