为什么有限递归行为会导致崩溃? (free(): 无效指针)
Why does finite recursive behaviour cause a crash ? (free(): invalid pointer)
下面是我的代码只是一个名为 kk 的函数,它将被递归调用 10 次,因此不可能导致堆栈溢出,但它会因
而崩溃
Error in `./3': free(): invalid pointer: 0x0000000000602100
谁知道原因??
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 NO_UNNAMED_RAII_OBJECTS 这是导致问题的原因。
在每个 return 上,都会创建和删除临时对象。
修改如下代码:
#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=werqqqqqqqqqq
我猜你忘了把 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;
}
下面是我的代码只是一个名为 kk 的函数,它将被递归调用 10 次,因此不可能导致堆栈溢出,但它会因
而崩溃Error in `./3': free(): invalid pointer: 0x0000000000602100
谁知道原因??
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 NO_UNNAMED_RAII_OBJECTS 这是导致问题的原因。 在每个 return 上,都会创建和删除临时对象。
修改如下代码:
#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=werqqqqqqqqqq
我猜你忘了把 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;
}