Я использую 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 os: ubuntu64