STL list push_back崩溃
写代码过程中,遇到崩溃,崩溃地方是queue的front(),检查了所有代码,未找到原因后来尝试改为list,结果list 的push_back()数据,就会崩溃,后来找到原因,以下为主要代码,备份一下,以防再犯类似错误不应该对STL的容器执行memset 清零typedef struct _Source{char name[128];uint64_t time;...
·
写代码过程中,遇到崩溃,崩溃地方是queue的front(),检查了所有代码,未找到原因
后来尝试改为list,结果list 的push_back()数据,就会崩溃,后来找到原因,以下为主要代码,备份一下,以防再犯类似错误
不应该对STL的容器执行memset 清零
typedef struct _Source
{
char name[128];
uint64_t time;
std::list<Data*> dataList;
_Source()
{
memset(name,0,128);
time = 0;
}
}Source;
Source *source = new Source;
memset(source,0,sizeof(Source));//罪魁祸首
Data *data = new Data;
source->dataList.push_back(data);//崩溃
原因:分配了结构体指针后,memset清零里面的数据,把队列成员对象也清0了,
int size = sizeof(std::queue<char>); //x64 = 48 win32=24 vs2010下测试
int size = sizeof(std::list<char>); //x64 = 24 win32=12 vs2010下测试
从大小来看,容器对象内部有定义一些分配内存的结构
memset清零会破坏其值,导致后续的函数操作会崩溃
更详细权威的解释,需要看各个容器的实现源码,等有时间可以再研究
更多推荐
已为社区贡献1条内容
所有评论(0)