如何轻松保护或跟踪指针崩溃?

时间:2013-02-23 04:25:38

标签: c++ pointers

我发现在有效分配指针之前,代码经常会崩溃,例如:

MyType* p = 0;
p->foo(); // crashes because p is not assigned.

为了保护if,我通常在使用指针之前添加一个assert语句,例如

assert(p);

但是也很容易忘记添加断言。有没有更好的方法来做保障?或者任何有助于在用户代码发生时找到崩溃的工具?

实际上,我使用智能指针来拥有数据。原始指针仅用于参考。例如:

std::unique_ptr<Model> p;

class View
{
public:
    View(Model* model = 0) : m_model(model) {}

    void setModel(Model* model) {m_model = model;}
    Model* model() const {return m_model;}

private:
    Model* m_model;
};

当我忘记为视图设置模型时,问题仍然存在。在大型代码中,很容易忘记这样做。

1 个答案:

答案 0 :(得分:0)

我最喜欢这种东西的工具是valgrind。在开发过程中,您运行的程序如valgrind myProg...,它会告诉您有关无效的内存访问,泄漏和其他事情。

但至于在解除引用之前添加一个指针不为null的断言,如果你说程序在null解除引用时崩溃,这似乎有点不必要。添加断言可能会使崩溃的原因更容易跟踪,但也许您有更深层次的问题(即一般过度使用或滥用原始指针)。