在调试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 int wl_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\n");}
没有立即引起段错误(后面的printf仍然有输出),反而在函数返回的时候出发了段错误。
这里涉及到sizeof(std::string )的问题,依赖于标准库的在不同平台的实现,而这个求出来的大小不是我们期望的string对象的字符长度,所以导致memset引发段错误。