程序在加载时崩溃

时间:2015-03-12 20:13:17

标签: c++

编译时没有错误,但我的程序在启动后就崩溃了。

我的源代码:

#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;
}

有人能弄清楚它崩溃的原因吗?

1 个答案:

答案 0 :(得分:1)

您的主要问题是此行可能无法执行您希望的操作:

std::vector<int> myTab = {length};

它创建一个带有一个元素的向量。也就是说,您将获得无限递归,因为myTab.size()永远不会变为零以及越界访问。你可能想要使用

std::vector<int> myTable(length);

使用大括号的版本构建std::vector<int>列出其元素的std::initializer_list<int>。使用括号的版本会创建指定大小的std::vector<int>