HarmonyOS鸿蒙Next中Network Kit(网络服务)使用WebSocket访问网络(C/C++)文档的示例代码存在问题

HarmonyOS鸿蒙Next中Network Kit(网络服务)使用WebSocket访问网络(C/C++)文档的示例代码存在问题 【问题描述】:Network Kit(网络服务)-访问网络-使用WebSocket访问网络(C/C++)文档的构建工程锚点的第一个代码块中,char *tmp = new char[length + 1];每次收到消息都会new一块内存,但从未释放。

【问题现象】:C++示例代码中的onMessage回调函数使用new分配了内存来处理接收到的数据,但在函数结束前未调用delete[]释放内存。这会导致应用在每次接收消息时产生内存泄漏,属于严重的资源管理逻辑硬伤。

cke_9328.png

【版本信息】:不涉及

【复现代码】:不涉及


更多关于HarmonyOS鸿蒙Next中Network Kit(网络服务)使用WebSocket访问网络(C/C++)文档的示例代码存在问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

尊敬的开发者,您好!感谢您的反馈,问题正在加速处理中,还请关注后续版本,感谢您的理解与支持。

更多关于HarmonyOS鸿蒙Next中Network Kit(网络服务)使用WebSocket访问网络(C/C++)文档的示例代码存在问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


看起来是的。

《HarmonyOS鸿蒙Next中Network Kit(网络服务)使用WebSocket访问网络(C/C++)文档的示例代码存在问题》

常见问题包括:

  • WebSocket连接未正确处理生命周期
  • 回调接口未释放导致内存泄漏
  • C/C++层与JS层数据转换错误或协议头设置缺失

建议检查代码中OH_WebSocket_Connect的参数传递是否完整,以及OH_WebSocket_OnMessage回调中数据格式是否匹配。

这是一个典型的C/C++内存泄漏问题,文档中的示例代码在onMessage回调里每次使用new char[length + 1]分配内存,但没有对应的delete[]释放操作,属于明显的资源管理疏漏。

具体来看,每次收到WebSocket消息时都会分配一块新的堆内存,但函数返回前没有释放它,导致每次连接的生命周期内,每收到一条消息就会泄漏一块内存。如果消息频繁发送,内存占用会持续增长,最终可能导致应用因内存耗尽而崩溃。

正确的做法是在使用完tmp后立即调用delete[] tmp释放内存,或者直接改用std::string等RAII(资源获取即初始化)容器来避免手动管理内存。文档作为官方示例,应当展示这种基本的资源管理规范。

这个问题的性质是示例代码质量缺陷,可能会误导开发者形成错误的内存管理习惯。建议相关文档维护者尽快修正该代码段,在tmp不再使用后增加delete[] tmp;,或者整个示例改为使用现代C++的智能指针或标准容器,从根源上消除内存泄漏风险。

回到顶部