我尝试实现堆类,但我不能在其中使用vector。
#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;
}
答案 0 :(得分: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)
,以便抛出异常。
请记住,错误处理不会解决问题,但可以为您提供导致解决方案的重要提示。此外,您应该考虑使用调试器。他们会告诉你哪一行代码导致程序停止工作。