【发布时间】:2019-10-23 04:22:00
【问题描述】:
我正在使用 g++。
代码:
std::string str = "{\"action\":3,\"data\":{\"account\":\"somehashgoeshear\",\"someint\":0,\"id\":1,\"moreint\":0,\"name\":\"demo\"}}";
char *cstr = strdup(str.c_str());
lwsl_notice("\n%s", cstr);
return lws_write(wsi, (unsigned char*)cstr, strlen(cstr), LWS_WRITE_TEXT);
这也行不通:
std::string str = "{\"action\":3,\"data\":{\"account\":\"somehashgoeshear\",\"someint\":0,\"id\":1,\"moreint\":0,\"name\":\"demo\"}}";
return lws_write(wsi, (unsigned char*)str.c_str(), strlen(str.c_str()), LWS_WRITE_TEXT);
但这工作正常(运行多次没有错误):
char cstr[96] = "{\"action\":3,\"data\":{\"account\":\"somehashgoeshear\",\"someint\":0,\"id\":1,\"moreint\":0,\"name\":\"demo\"}}";
return lws_write(wsi, (unsigned char*)cstr, strlen(cstr), LWS_WRITE_TEXT);
也尝试使用malloc 创建字符串,但这也不起作用:
std::string str = "{\"action\":3,\"data\":{\"account\":\"somehashgoeshear\",\"someint\":0,\"id\":1,\"moreint\":0,\"name\":\"demo\"}}";
char *cstr = (char *)malloc((str.length() + 1) * sizeof(char));
strcpy(cstr, str.c_str());
lwsl_notice("\n%s", cstr);
return lws_write(wsi, (unsigned char*)cstr, strlen(cstr), LWS_WRITE_TEXT);
我可以多次运行此代码,但最终出现此错误:
free(): invalid next size (fast)
(发送数据后失败)
我还尝试了对 LWS_PRE 的几个实验,但是当我将它添加到字符串时,它会在消息的开头添加几个符号,例如:a":
当我在发送数据后尝试free(cstr) 时,它立即失败并出现double free or corruption (out) 错误。
lws 版本:1.7.1 操作系统:ubuntu x64
【问题讨论】:
标签: c++ string memory-management libwebsockets