我正在生成一个大字符,以便将来使用 strcpy
和 strcat
传递给线程。一切顺利,直到我需要用其中一个字符串中出现的所有空格替换逗号。我搜索了此 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/