为什么这段代码会引发分段错误?:/
listeners = new vector<Listener*> ();
... /* other code */
if (listeners != NULL) {
int i = listeners->size();
}
答案 0 :(得分:2)
仅仅因为指针不是NULL
并不意味着它指向有效的vector<Listener*>
对象。
通过 valgrind 运行程序以检测内存损坏问题,并确保通过调试器运行代码。
如果您仍然遇到问题,请发布一个可以重现问题的测试(而不是那些没有问题的小代码片段。)
答案 1 :(得分:1)
比使用valgrind更容易在分配后立即移动listeners->size()
调用,看看它是否会出现段错误。如果不是,请将其移动几行代码并再试一次,重复一遍。如果它是段错误,你只是找到导致它的行。也许你已经使用指针做了一些事情,这是一种找到这段代码的方法。
看看bisection method。
可能永远不会起作用,它更像是一种启发式。
答案 2 :(得分:0)
vector<Listener*> listeners;
可能会为您节省一些问题或使代码中断的原因更明显