c++
字符串
string
内存管理
以下是代码片段,下面有我的分析和猜测,期待dalao的回答。
void DS(string* drogan)
{
int i;
string* ss;
for(i = 0; i < number; i++)
{
if(cost[i] > 0)
{
string* s = Check(drogan, i);
if(s != NULL)//can add
{
int m, len;
// work and set
*drogan += *s;
m = lastWord;
lastWord = i;
cost[i]--;
totalCost--;
len = drogan->length() - s->length(); // fixed code!!!
// go on
DS(drogan);
// re set
//len = drogan->length() - s->length(); // bug!!!
ss = new string();
ss->assign(*drogan, 0, len);
drogan = ss;
cout << *drogan << endl;
lastWord = m;
cost[i]++;
totalCost++;
}
}
}
// find max
int len = drogan->length();
if(len > maxLen)
{
cout << *drogan << endl;
cout << len << endl;
maxLen = len;
}
}
问题分析
这段是一段递归代码,注意注释了“// fixed code!!!”和“// bug code!!!”的两行代码。
两行代码的作用都是分别获取两个字符串的长度然后相减。
bug code那个位置(递归后)的代码并不能正确获得字符串的长度。
而fixed code那个位置(递归前)却能。
猜测的问题原因:
递归回来后,string被释放了。
期待dalao的解答
网友评论