这里有一篇这种错误的链接,当前并不是我本次的错误所在,只是给大家一个链接参考:http://www.tech-archive.net/Archive/VC/microsoft.public.vc.language/2009-04/msg00141.html
情况是这样的,一项目由VS2003转成VS2008后在Release模式下运行;
// 用户角色信息
typedef struct __USERINFO
{
char szTxt[1024];
}USERINFO, *PUSERINFO;
typedef struct __USERROLEINFO
{
char szDevUID[20];
vector<__USERINFO> vtUserInfo;
}USERROLEINFO, *PUSERROLEINFO;
在某个函数下:
void fun()
{
USERINFO tag;
USERROLEINFO tag1;
// VS2008Debug下不会出错, VS2003下Debug和Release都不会出错;
memset(tag, 0, sizeof(USERINFO ));
memset(tag1, 0, sizeof(USERROLEINFO ));// 只要删除这句,VS2008Release模式就不会有错; 明显,这里将vector<>对象置空了,导致指针失效;
// pushback时,在VS2008的Release下出错;
tag1.vtUserInfo.push_back(tag);
}
这个问题,让我在转项目时,足足花了几个小时才发现。所以,留个底,共享给大家。