c语言 memset 段错误,memset 导致的段错误(segmentation fault)

本文探讨了在使用Minixml库时遇到的一个内存管理问题,涉及结构体中包含std::string成员的初始化。由于std::string的大小依赖于实现,直接用memset可能导致覆盖未分配内存,这种错误通常在函数返回时引发段错误。解决方案是避免对包含复杂类型的结构体使用memset,而是采用适当的构造函数或初始化列表进行初始化。
摘要由CSDN通过智能技术生成

在调试Minixml库时,定义了一个结构体:

struct ssid_info_s{

std::string wl_ssid_name;

std::string wl_ssid_mac;

std::string wl_wpa_psk;

bool wl_bss_enabled;

unsigned int wl_sta_num;

unsigned int wl_maxassoc;

bool wl_hide;

bool wl_radio;

bool wl_isolate;

unsigned int wl_pwr_percent;

unsigned int wl_bw;

unsigned intwl_band;

unsigned int wl_nmode;

unsigned int wl_auth_mode;

unsigned int wl_channel;

};

做类似以下操作:

void fun(){

struct ssid_info_s ssid_info;

memset(&ssid_info, 0, sizeof(structs sid_info_s));

printf("111111

");}

没有立即引起段错误(后面的printf仍然有输出),反而在函数返回的时候出发了段错误。

这里涉及到sizeof(std::string )的问题,依赖于标准库的在不同平台的实现,而这个求出来的大小不是我们期望的string对象的字符长度,所以导致memset引发段错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值