编译时没有错误,但我的程序在启动后就崩溃了。
我的源代码:
#include <iostream>
#include <vector>
std::vector<int> recursivite(std::vector<int> source, int index, int length);
int main()
{
std::vector<int> myTab {{ 1, 2, 3, 4,
5, 6, 7, 8,
9, 10, 11, 12,
13, 14, 15, 16,
17, 18, 19, 20
}};
std::vector<int> myTab2{{0, 0, 0, 0}};
myTab2 = recursivite(myTab, 4, 4);
for (unsigned int i{}; i < myTab2.size(); ++i)
std::cout << myTab2[i];
}
std::vector<int> recursivite(std::vector<int> source, int index, int length)
{
std::vector<int> myTab = {length};
if (myTab.size() > 0)
{
myTab[length - 1] = source[index + length - 1];
recursivite(source, index, length - 1);
}
return myTab;
}
有人能弄清楚它崩溃的原因吗?
答案 0 :(得分:1)
您的主要问题是此行可能无法执行您希望的操作:
std::vector<int> myTab = {length};
它创建一个带有一个元素的向量。也就是说,您将获得无限递归,因为myTab.size()
永远不会变为零以及越界访问。你可能想要使用
std::vector<int> myTable(length);
使用大括号的版本构建std::vector<int>
列出其元素的std::initializer_list<int>
。使用括号的版本会创建指定大小的std::vector<int>
。