You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS2019 C++写入Ubuntu设备数组报stream != NULL调试断言失败

问题根因

报错的直接原因是fopen调用执行失败返回了NULL空指针,后续fwrite传入空的文件流指针触发了Microsoft VC++调试库的断言校验。你在Ubuntu侧修改目录权限未生效,是因为问题出在Windows侧的文件访问逻辑,和Ubuntu本地权限没有直接关联。

可能的故障原因

  • 路径格式/合法性错误
    你当前代码使用Windows下的反斜杠\\作为路径分隔符,首先需要确认你拼接的pcSavePath是否是正确的Ubuntu共享目录访问路径(SMB共享路径应该以\\\\设备IP\\共享名开头);其次如果拼接出的完整路径总长度超过256字节,会导致pcFolderName/pcFileName缓冲区溢出,路径字符串损坏,fopen无法识别有效路径。
  • 父目录不存在
    fopen不会自动创建多级父目录,如果你拼接出的pcFolderName目录在Windows侧访问时不存在,fopen会直接返回NULL,你需要先手动创建该目录,或者在代码中增加目录创建逻辑。
  • Windows侧访问权限不足
    你在Ubuntu侧修改的是本地目录权限,但是Windows通过SMB访问共享目录时,使用的是你挂载共享时输入的账号权限。需要确认跑代码的Windows机器可以直接在资源管理器中访问目标路径,且能手动新建、修改文件,才说明Windows侧的访问权限正常。
  • 文件名存在非法字符
    如果pcUUTSerialNumber中包含/ : * ? " < > |等Windows文件名禁止的特殊字符,也会导致路径解析失败,fopen返回空。

排查方案

  1. 在fopen调用后增加空指针判断和错误日志打印,快速定位问题:
pFileW = fopen(pcFileName,"wb");
if (pFileW == NULL) {
    // 打印错误码和完整路径,确认问题类型
    printf("打开文件失败,路径:%s,系统错误码:%d\n", pcFileName, GetLastError());
    perror("fopen错误描述");
    return -1;
}
  1. 把代码拼接出的完整pcFileName路径打印出来,复制到Windows资源管理器的地址栏,确认路径可以正常访问,且支持写入操作。
  2. 校验pcSavePath、pcUUTSerialNumber的取值是否合法,没有空指针、特殊字符,路径总长度不超过256字节。

内容的提问来源于stack exchange,提问作者Immortal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 21:06:03