c++ - 具有相同 src 的多个“strcat”上的内存损坏
问题描述
这是一个非常简单的问题,但令我震惊的是我找不到简单的解决方案。我正在尝试创建两个作为文件路径的字符串。/元数据/位图/元数据/元数据.bin
但是我第二次尝试strcat()
使用相同的 src 变量时会爆炸成内存损坏
//create the dir strign to append
char* metadata_dir = strdup(MNT_POINT);
strcat(metadata_dir, "Metadata/");
char* bitmap_file = strdup("");
strcat(bitmap_file,metadata_dir);
strcat(bitmap_file,"bitmap");
printf("%s\n",bitmap_file);
char* meta_file = strdup("");
strcat(meta_file, metadata_dir);
strcat(meta_file, "Metadata.bin");
printf("%s\n",meta_file);
就在这条线上
strcat(meta_file, metadata_dir);
,内存损坏发生了。
我确信 metadata_dir 没有损坏,因为我可以在代码中的任何位置打印它并且看起来不错。
奇怪的是,这取决于正在运行的机器。在 Ubuntu 64 中工作得很好。但在 32 位版本中没有。
解决方案
strdup
只保证为您正在复制的字符串返回一个足够大的缓冲区(包括空终止符);它可能没有(并且通常不会)有空间将其他东西连接到它。当您使用strcat
.
编辑:当然,解决方案是malloc
提前足够大的缓冲区,而不是让strdup
这样做。
推荐阅读
- google-cloud-platform - 无法为主题创建订阅
- architecture - 虚拟内存功能
- reactjs - Apollo GraphQL 的动态标头(中间件之外)
- performance - 调度不同缓存名称的性能和影响
- esp8266 - 如何知道 ESP8266 上的 spiffs 分区中剩余多少空间?
- dart - List.map 是否保证保留原始列表的排序顺序?
- java - 由于未找到类错误,无法使用 bat 文件运行 Java 文件
- git - 使用 Azure DevOps Git 配置的 DataFactory 的 Azure ARM 模板部署
- javascript - 如何使用 json 和烧瓶将字符串数据从 pandas 数据帧传递到 google.visualization.DataTable
- excel - 如何在Excel之前添加空格和双倍数字以及更改测量单位