场景:
两个Project A和B, 在B中的某个类BB中增加了几个成员变量,BB类的头文件被Project A中的某段代码引用。
A中的引用代码是。
vector<BB> lvBB;
lvBB.resize(2).
在对BB类做了修改之后,只是单纯的对project B做了编译,而没有对A做编译。
结果:
当运行到上面那段代码的时候,产生了accesss violatioin的问题。
原因:
在对BB类做了修改之后,只是单纯的对project B做了编译,而没有对A做编译。
这样在Project A里面还是认为BB类的大小还是原来的大小,所以在分配内存的时候也只是分配了原来大小的空间,
但是调用resize()的时候会触发BB类的构造函数,在BB构造函数中需要对增加的成员变量赋值,不赋值还好,一赋值就成了内存非法访问了,
因为这块内存空间没有分配。
教训:
以后还是编译整个solution,而不是单个project编译, 或者知道依赖关系的话,可以一个一个编译。