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

调用pthread_create传递结构体参数时字符串出现额外字符问题

问题原因及修复方案

核心问题:内存分配未预留字符串结束符空间

你遇到的字符串长度异常,本质是内存越界写入引发的未定义行为:

  • strlen("/dev/ttyUSB1")返回12,这是字符串的有效字符数,但C语言字符串必须依赖末尾的'\0'作为结束标记
  • 你用malloc(strlen(serial_device))仅分配了12字节内存,而strcpy会把源字符串的12个有效字符加上'\0'共13字节数据拷贝进去,直接越界写入1字节
  • 越界的'\0'会破坏相邻内存区域的数据,后续线程中调用strlen时,会一直读到内存中随机出现的'\0'才停止,所以长度变成了14

修复代码

只需修改内存分配逻辑,为'\0'多预留1字节空间:

// 原代码
s->dev = (char *)malloc(strlen(serial_device));
// 修改后
s->dev = (char *)malloc(strlen(serial_device) + 1);

更简洁安全的方式是用strdup,它会自动计算所需内存并完成拷贝:

s->dev = strdup(serial_device);

另外,程序结束前记得释放分配的内存,避免泄漏:

// 在main函数末尾添加
free(s->dev);
free(s);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:35:22