gpt4 book ai didi

c++ - 大型递归字符串操作的段错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:48:19 28 4
gpt4 key购买 nike

我正在挑战 www.adventofcode.com/day/10

我有一个我认为有效的代码,我使用 C++ 只是为了在玩乐的同时学习。

我正在递归地进行字符串操作。这里的问题是程序因段错误而崩溃在进行超过 38 次迭代时在“char ch = line[0]”行上。

#include <iostream>
#include <string>

using namespace std;

string count_chars(string line){
char ch = line[0];
uint i;
for(i = 0; ch == line[i]; i++){

}
if(i != line.length()){
line = to_string(i) + ch + count_chars(line.substr(i));
}
else{
line = to_string(i) + ch;
}
return line;
}
int main(int argc, char** args)
{
//ifstream in("dayx");
/*
if(argc ==1)
return 1;
string line;
cout << line.capacity() << endl;
line = args[1];
*/
string line = "1";
for(int i = 1; i < 40; i++){
line = count_chars(line);
//cout << line << " after " << i << " iterations" << endl;
cout <<"Line size: " << line.size() << endl;
}
cout << line << endl;
}

代码编译使用:

g++ day10.cpp --std=c++11 -g

我的问题是,为什么会发生这种情况,我该如何预防它以及我如何使用 gdb 来解决这个问题?谢谢!

我正在使用 linux 和 gcc 5.3

最佳答案

由于递归太深(数千次深度调用),您有堆栈溢出。您可以使用循环轻松实现该算法。

关于c++ - 大型递归字符串操作的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34446199/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com