美文网首页
C++ string释放?

C++ string释放?

作者: 御史神风 | 来源:发表于2018-06-16 16:50 被阅读0次

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的解答

相关文章

网友评论

      本文标题:C++ string释放?

      本文链接:https://www.haomeiwen.com/subject/omybeftx.html