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;
    }