c++ - 尝试替换字符串中的字符时发生内存泄漏

标签 c++ string memory-leaks char

我正在生成一个大字符,以便将来使用 strcpystrcat 传递给线程。一切顺利,直到我需要用其中一个字符串中出现的所有空格替换逗号。我搜索了此 here 的解决方案

问题是,现在我有内存泄漏,程序退出时显示以下消息:

_Dumping objects ->
{473} normal block at 0x0091E0C0, 32 bytes long.
 Data: <AMLUH UL619 BKD > 41 4D 4C 55 48 20 55 4C 36 31 39 20 42 4B 44 20 
{472} normal block at 0x049CCD20, 8 bytes long.
 Data: <        > BC ED 18 00 F0 EC 18 00 
{416} normal block at 0x082B5158, 1000 bytes long.
 Data: <Number of Aircra> 4E 75 6D 62 65 72 20 6F 66 20 41 69 72 63 72 61 
{415} normal block at 0x04A0E200, 20 bytes long.
 Data: <                > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
{185} normal block at 0x049DA998, 64 bytes long.
 Data: < O X8   8       > DC 4F BB 58 38 C5 9A 06 38 D3 88 00 00 00 00 00 
PythonPlugin.cpp(76) : {172} normal block at 0x0088D338, 72 bytes long.
Data: < a X  F <)      > DC 61 BB 58 18 BB 46 06 3C 29 8A 06 CD CD CD CD 
Object dump complete._

这是代码,所以你可以告诉我我做错了什么:

问题代码:

char* loop_planes(ac){

char *char1=new char[1000];
    for(...){
         strcpy(char1,"Number of Aircrafts\nHour of simulation\n\n");
         string tmp2=fp.GetRoute();
         tmp2.replace(tmp2.begin(),tmp2.end()," ",","); #PROBLEM IS IN THIS LINE

         const char *tmp3=tmp2.c_str();
         strcat(char1,tmp3);

    }
return char1;
}

fp.GetRoute() 是这样的字符串:AMLUH UL619 BKD UM748 RUTOL

此外,既然我正在谈论内存分配,我不希望将来出现任何内存泄漏问题,所以我应该什么时候delete char1,知道了线程要调用这个函数?

最佳答案

当您调用 std::string::replace 时,最佳匹配是一个函数模板,其第三和第四个参数是输入迭代器。因此,您传递的字符串文字被解释为范围的开始和结束,如果不是。这会导致未定义的行为。

您可以使用算法 std::replace 轻松解决此问题相反:

std::replace(tmp2.begin(),tmp2.end(),' ',',');

请注意,这里的第三个和第四个参数是单个char

关于c++ - 尝试替换字符串中的字符时发生内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22770793/

上一篇:C++ 浮点表示

下一篇:c++ - 了解 move 语义

相关文章:

c++ - XP 应用程序不会增加 CPU 利用率

c++ - 避免默认参数异常

php - 将文本拆分成句子

c - 我是否发现了 libxml2 错误(多线程解析中的内存泄漏)?

c++ - std::function 是否支持自定义分配器?

c++ - 无法在 Main.cpp 中使用链表

Java 字符串缓冲区

Python 字符串格式 : % vs concatenation

c++ - 在 vector 中使用共享指针时发生内存泄漏

c# - 这个函数的内存泄漏在哪里?