热门IT资讯网

memset to struct 引起的 core

发表于:2024-11-26 作者:热门IT资讯网编辑
编辑最后更新 2024年11月26日,#includeusing namespace std;struct A{ int a; int b;};struct B{ int a; char aa[10]; ch
#includeusing namespace std;struct A{    int a;    int b;};struct B{    int a;    char aa[10];    char ab[30];    int b;    char ni[40];    string cs; };int main(){    /*A mya;    mya.a=3;    mya.b=4;    void * pa =(void*)&mya;    B* pb=(B*)pa;*/    B ba;     memset(&ba,0,sizeof(B));    /*cout<a<b<aa<ni<cs;}


产生的 core 文件

gdb a core.***


bt

(gdb) bt#0  0x00007ff0978960d7 in __exchange_and_add (this=0xffffffffffffffe8, __a=...)    at /data/home/root/source/build_gcc4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/ext/atomicity.h:48#1  __exchange_and_add_dispatch (this=0xffffffffffffffe8, __a=...)    at /data/home/root/source/build_gcc4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/ext/atomicity.h:81#2  std::basic_string, std::allocator >::_Rep::_M_dispose (this=0xffffffffffffffe8, __a=...)    at /data/home/root/source/build_gcc4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/basic_string.h:242#3  0x00007ff097896130 in std::basic_string, std::allocator >::~basic_string (this=Unhandled dwarf expression opcode 0xf3)    at /data/home/root/source/build_gcc4.7.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/basic_string.h:535#4  0x0000000000400c00 in B::~B (this=0x7fff35938f40, __in_chrg=) at test_struct.cpp:13#5  0x0000000000400b63 in main () at test_struct.cpp:39


原因:

因为,memset(&,0,sizeof()) 会把 struct 结构体内的 所有复位 为0,内含的 string 对象 被毁坏了,在析构时 string对象的析构调用问题,


对应 struct 内含 对象 最好不要用 memset 这类函数

0