Javascript EM_JS:无法释放cpp中的常量字符*
获取编译错误:Javascript EM_JS:无法释放cpp中的常量字符*,javascript,c++,emscripten,Javascript,C++,Emscripten,获取编译错误:无法使用'const char*'std::free(响应)类型的左值初始化'void*'类型的参数 还尝试了:std::free((char*)response)编译成功,但在使用cout检查时未释放内存。 下面的文档来自:但是在使用cout检查时内存没有被释放。你为什么这么认为?@eerorika我检查了“cout”,基本上它也是在运行free()之后打印分配的值。我不知道为什么会发生这种情况:(如果您试图在释放的内存中打印一个值,那么您的程序的行为是未定义的。您无法得出“未释
无法使用'const char*'std::free(响应)类型的左值初始化'void*'类型的参数代码>
还尝试了:std::free((char*)response)
编译成功,但在使用cout检查时未释放内存。
下面的文档来自:但是在使用cout检查时内存没有被释放。
你为什么这么认为?@eerorika我检查了“cout”,基本上它也是在运行free()之后打印分配的值。我不知道为什么会发生这种情况:(如果您试图在释放的内存中打印一个值,那么您的程序的行为是未定义的。您无法得出“未释放”的结论)基于未定义的行为。它的行为不是未定义的。它只是打印出分配的值,这意味着它的内存不可用。对吗?当程序的行为未定义时,它可以有任何行为。打印出的值包含在所有可能行为的列表中。因此,具有未定义行为的程序可能会nt是一个值。
EM_JS(const char*, get_todo_item, (const char *str), {
return Asyncify.handleAsync(async() => {
const text = UTF8ToString(str);
out("text >> " + text);
let response = await fetch("https://jsonplaceholder.typicode.com/todos/1");
response = await response.json();
var lengthBytes = lengthBytesUTF8(jstring)+1;
var stringOnWasmHeap = _malloc(lengthBytes);
stringToUTF8(jstring, stringOnWasmHeap, lengthBytes);
return stringOnWasmHeap;
});
});
int main()
{
const char* response = get_todo_item("4455454545");
std::free( response);
return 0;
}