EM_JS: невозможно освободить const char * в cpp

#javascript #c #emscripten

#javascript #c #emscripten

Вопрос:

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

Ошибка компиляции : cannot initialize a parameter of type 'void *' with an lvalue of type 'const char *' std::free( response);
Также пробовал: std::free((char *)response) успешная компиляция, но память не освобождается при проверке с помощью cout.
Следующая документация от: https://emscripten.org/docs/api_reference/emscripten.h.html#c.EM_JS

Комментарии:

1. but memory is not freed when checking with cout. Почему вы так думаете?

2. @eerorika Я проверил «cout», в основном он также печатает заданное значение после запуска free(). Я не знаю, почему это происходит: (

3. Если вы попытаетесь напечатать значение в освобожденной памяти, поведение вашей программы не определено. Вы не можете сделать вывод «не освобожден» на основе неопределенного поведения.

4. Он не ведет себя неопределенно. Он просто выводит присвоенное значение, что означает, что его память не свободна. верно?

5. Если поведение программы не определено, то оно может иметь любое поведение. Распечатка значения включена в список всех возможных вариантов поведения. Поэтому программа с неопределенным поведением может печатать значение.