C++ 为什么有限递归行为会导致崩溃?(free():无效指针)

C++ 为什么有限递归行为会导致崩溃?(free():无效指针),c++,string,recursion,crash,invalid-pointer,C++,String,Recursion,Crash,Invalid Pointer,下面是我的代码,只是一个名为kk的函数,它将被递归调用10次,因此不可能导致堆栈溢出,但它会崩溃 “./3”中出错:空闲:无效指针:0x000000000062100 谁知道原因 string kk(string &s) { static int i=0; s+="q"; i++; cout<<"i="<<i<<endl; if(i>=10) return s; kk(s); } int mai

下面是我的代码,只是一个名为kk的函数,它将被递归调用10次,因此不可能导致堆栈溢出,但它会崩溃

“./3”中出错:空闲:无效指针:0x000000000062100

谁知道原因

string kk(string &s)
{
    static  int i=0;
    s+="q";
    i++;
    cout<<"i="<<i<<endl;
    if(i>=10) return s;
    kk(s);
}

int main()
{
    string s="wer";

    cout<<"s="<<kk(s)<<endl;
}
C26444没有未命名的对象这是导致问题的原因。 每次返回时,都会创建并删除临时对象

修改代码如下:

#include <iostream>
#include <cstdlib>

static  int i = 0;

void kk(std::string& s)
{

    s += "q";
    i++;
    std::cout << "i=" << i << std::endl;
    if (i >= 10) return ;
    kk(s);
}

int main()
{
    std::string s = "wer";
    kk(s);
    std::cout << "s=" << s << std::endl;
}
输出:

i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 s=WERQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ


我猜你忘了把return关键字放在最后一行。换句话说,代码工作时没有错误

string kk(string &s)
{
static  int i=0;
s+="q";
i++;
cout<<"i="<<i<<endl;
if(i>=10) return s;
return kk(s);
}

int main()
{
string s="wer";

cout<<"s="<<kk(s)<<endl;
}

函数签名的返回类型为字符串,但实际返回的是什么?您是否阅读了函数签名的重复问题?这一行:ifi>=10个返回s;当递归10次时,将返回字符串s?是否会导致问题?是的,忽略return语句将导致未定义的行为,但我的函数将返回s,直到递归10次,您的意思是,返回不会通过递归级联。你需要更换kks;否则返回kks;所以它总是返回一个值。