糟糕的类,隐蔽的错误,修改栈中的变量

现在有三行代码:
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;
}

输出如下:
在这里插入图片描述

发布了11 篇原创文章 · 获赞 0 · 访问量 195

猜你喜欢

转载自blog.csdn.net/shensheng100221/article/details/103816246