vector :: size和Segmentation fault

时间:2011-05-26 09:32:15

标签: c++ vector size segmentation-fault

为什么这段代码会引发分段错误?:/


listeners = new vector<Listener*> ();

... /* other code */

if (listeners != NULL) {
int i = listeners->size();
}

3 个答案:

答案 0 :(得分:2)

仅仅因为指针不是NULL并不意味着它指向有效的vector<Listener*>对象。

通过 valgrind 运行程序以检测内存损坏问题,并确保通过调试器运行代码。

如果您仍然遇到问题,请发布一个可以重现问题的测试(而不是那些没有问题的小代码片段。)

答案 1 :(得分:1)

比使用valgrind更容易在分配后立即移动listeners->size()调用,看看它是否会出现段错误。如果不是,请将其移动几行代码并再试一次,重复一遍。如果它是段错误,你只是找到导致它的行。也许你已经使用指针做了一些事情,这是一种找到这段代码的方法。 看看bisection method

可能永远不会起作用,它更像是一种启发式。

答案 2 :(得分:0)

vector<Listener*> listeners;可能会为您节省一些问题或使代码中断的原因更明显