memset 导致的段错误(segmentation fault)
在调试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引发段错误。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步