-3

我尝试实现一个堆类,但我无法在其中使用向量。

#include <vector>

template <typename T>
class Heap {

public:
    Heap() {
    current_size = 0;
    }
private:
    int current_size;
    std::vector<T> array;
};

当我尝试运行该程序时,它会崩溃。“project2.exe 已停止工作。”

编辑 :

主功能 :

int main(int argc,char *argv[]) {

    Heap<int> events;
}
4

1 回答 1

1

"project2.exe has stopped working."是一个模糊的错误,但肯定会在运行时发生。这对您或您的程序的用户没有帮助,因此您需要实现更好的错误处理。

使用向量时,运行时错误通常来自错误的分配(std::bad_alloc异常)和访问向量中不存在的元素(std::out_of_range异常)。捕获这些异常以防止您的程序崩溃、内存泄漏和显示"project2.exe has stopped working."错误消息。

您可以通过在 main 函数中放置一个 try-catch 块来捕获程序中的所有异常:

int main(int argc, char *argv[])
{
    try
    {
        // put all your code here
        Heap<int> events;
    }
    catch (const std::exception& x)
    {
        // all std exceptions are caught here
        std::cerr << x.what() << '\n';
    }
}

如果您的代码包含vector[subscript],则不会引发std::out_of_range异常。如果您不需要对性能至关重要,请将其替换vector.at(subscript)为抛出异常。

请记住,错误处理不会解决问题,但可以为您提供关键提示,从而导致解决方案。此外,您应该考虑使用调试器。他们会告诉你哪一行代码导致程序停止工作。

于 2012-11-11T18:25:15.177 回答