在调试一个游戏源码的时候发现一个问题,就是通过void *转换成含有vector成员的类指针时,debug环境下vector内部报错,类似代码如下:
class testInfo
{
public:
testInfo() {}
~testInfo() {}
std::vector<int> m_vecTest;
};
int main()
{
//为了说明问题及简化代码,这里不直接new testInfo,实际逻辑并非这样,游戏源码有个类专门负责申请内存,返回PVOID(void *),
//再由各个模块强制转换成对应模块(对应这里的额testInfo)
PVOID pBuffer = (PVOID)new BYTE[1024];
memset(pBuffer, 0, 1024);
testInfo* testvec = (testInfo*)pBuffer;
for (int i = 0; i < 10; ++i)
{
testvec->m_vecTest.push_back(i);//debug下此处报错
}
return 0;
}
报错如下图所示

经过调试发现_Myproxy为NULL,m_vecTest没有进入构造函数,网上查资料说,使用memset,会破坏vector的结构,注释掉掉memset,报如下错误:

应该还是构造的问题,不知如何处理?