【问题标题】:Heap corruption detected (String makes heap corruption) | C++检测到堆损坏(字符串导致堆损坏)| C++
【发布时间】:2020-05-16 09:53:53
【问题描述】:

我不知道为什么这个函数会导致堆损坏,我确定函数 copyFile 与错误无关。请检查并帮助我TT

    void copyFileToFolder(char* fileName, char* folderName)
{
    char backSlash = '\\';
    char *nameOfFileWithBackSlashInHead = strrchr(fileName, backSlash);
    char *newFileName = strcat(folderName, nameOfFileWithBackSlashInHead);
    FILE* f = fopen(newFileName, "wb");
    if (!f)
    {
        cout << "Folder does't exist";
        return;
    }
    fclose(f);
    copyFile(fileName, newFileName);
}

【问题讨论】:

  • P/S:尽管堆损坏,程序仍然可以工作

标签: c++ string heap-corruption


【解决方案1】:

strcat 将附加到folderName,这是有问题的。 folderName 来自外部,如果您写入超出其分配的存储空间,可能会导致内存损坏。请参阅 strcat 附加到其第一个输入参数并返回它。

将您的函数签名更改为

void copyFileToFolder(const char* fileName, const char* folderName)

并创建一个新变量来存储附加的文件名。

【讨论】:

  • 我明白了,我已经创建了一个新变量来存储附加的文件名并且它有效。谢谢
猜你喜欢
  • 2018-03-26
  • 1970-01-01
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 2011-08-20
  • 2013-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多