napi_get_value_string_utf8多次调用出现cppcrash问题 HarmonyOS 鸿蒙Next
napi_get_value_string_utf8多次调用出现cppcrash问题 HarmonyOS 鸿蒙Next
将代码中的napi_get_value_string_utf8注释放开则会出现cppcrash问题
napi_value fileNative::writeArrayBuffer(napi_env env, napi_callback_info info) { OH_LOG_INFO(LOG_APP, “%{public}s”, “接收ArrayBuffer数据”); size_t argc = 2; napi_value argv[2] = {nullptr}; // 接收参数 napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr); // 获取写入的文件地址长度 size_t fileLen; napi_get_value_string_utf8(env, argv[0], nullptr, 0, &fileLen); char *path = new char(fileLen + 1); // napi_get_value_string_utf8(env, argv[0], path, fileLen + 1, &fileLen); OH_LOG_INFO(LOG_APP, “文件地址:%{public}s”, path); OH_LOG_INFO(LOG_APP, “fileLength:%{public}d”, (int8_t)fileLen); napi_value returnVal; napi_create_int32(env, 0, &returnVal); return returnVal; }
更多关于napi_get_value_string_utf8多次调用出现cppcrash问题 HarmonyOS 鸿蒙Next的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
napi_get_value_string_utf8(env, argv[0], path, fileLen + 1, &fileLen);
是想要获取第二个string吧,要改成:
napi_get_value_string_utf8(env, argv[1], path, fileLen + 1, &fileLen);
才能正常获取不崩溃
更多关于napi_get_value_string_utf8多次调用出现cppcrash问题 HarmonyOS 鸿蒙Next的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
感谢解答, 已找到解决方案将 new char(xxx) =>new char[xxx]
针对您提到的在HarmonyOS鸿蒙Next系统中,使用napi_get_value_string_utf8
多次调用后出现cpp crash的问题,这通常与内存管理或API使用不当有关。
在鸿蒙系统中,napi_get_value_string_utf8
用于从N-API值中提取UTF-8编码的字符串。多次调用该API导致crash,可能是因为:
- 内存重复释放:如果在之前的调用中已经释放了由
napi_get_value_string_utf8
返回的字符串内存,再次释放或访问这块内存将导致崩溃。 - 传入参数错误:确保每次调用时传入的
napi_value
、env
以及缓冲区参数均有效且未损坏。 - 缓冲区大小不足:如果提供的缓冲区不足以容纳完整的字符串,虽然通常不会直接导致crash,但可能导致未定义行为。
解决这类问题,需要仔细检查每次调用napi_get_value_string_utf8
时的上下文和参数。确保字符串内存的正确管理,以及API调用的正确性。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html