现在有三行代码:
int a=1;
SomeClass sc;
cout << a;
这个a的值竟然不是1,项目上遇到这样的情况,首先考虑的是查看其他线程是否改变了这个a。
折腾了半天才发现,是这个SomeClass,一个商用库的类竟然出现了这么糟糕的错误,它更改了栈中的变量。
尽管糟糕,实现一番,挺有趣味:
#include <stdio.h>
#include <iostream>
using namespace std;
class TmpClass{
public:
TmpClass(){
a = 10;
b = 10;
int * p = (int *)this;
p += 2;
*p = 0x1234;
}
int a;
int b;
};
int main(int argc, char *argv[])
{
int num0=1;
int num1=1;
int num2=1;
int num3=1;
int num4=1;
cout << num0<<","<<num1<<","<<num2<<","<<num3<<","<<num4<<endl;
TmpClass t;
cout << num0<<","<<num1<<","<<num2<<","<<num3<<","<<num4<<endl;
printf("t:%p\n",&t);
printf("num0:%p,num1:%p,num2:%p,num3:%p,num4:%p\n",&num0,&num1,&num2,&num3,&num4);
return 0;
}
输出如下: