在.cpp文件中,memset struct类型 所引发的segmentation fault 。 今天调试这个问题,调试了几个小时。 oh, my god.
sutiation:
在.h文件中声明一个struct a结构体:
struct a { std::string str; int value; };
然后在.cpp文件中的一个函数中,先是定义该结构体的类型的实例(struct a aa):
struct a aa; memset(&aa, 0x00, sizeof(struct a)); aa.str = "hello";结果就报:segmentation fault.了。 很明显没有访问了没有分配的内存地址。即:a.str = NULL.
printf("%s \n", aa.str.c_str());输出的结果是:nil。
得出结论:
虽然struct 定义的时候, 会有一个构造函数将其初始化, 但当memset时候, 将结构体struct a中的所有元素都置为0了。 而std::string str = NULL。 所以,我们在给aa.str 赋值的时候, 就会出段错误。
解决方案: 就是将该死的memset那行去掉就行了。
注:在C++中, struct 和memset不是一对好基友了。用的时候, 要小心一些。