首页 > 解决方案 > 具有相同 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 位版本中没有。

标签: c++cmemorydynamic-memory-allocation

解决方案


strdup只保证为您正在复制的字符串返回一个足够大的缓冲区(包括空终止符);它可能没有(并且通常不会)有空间将其他东西连接到它。当您使用strcat.

编辑:当然,解决方案是malloc提前足够大的缓冲区,而不是让strdup这样做。


推荐阅读