在.cpp文件中,memset struct类型 所引发的segmentation fault

来源:互联网 发布:游戏优化器 编辑:程序博客网 时间:2024/04/30 16:57

在.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不是一对好基友了。用的时候, 要小心一些。



原创粉丝点击