我有一个std :: vector导致一些非常奇怪的seg错误
//A.h
class A{
private:
std::vector<float> data;
public:
void set(const std::vector<float>& data);
};
//A.cpp
void A::set(const vector<float>& data){
this->data.clear(); // crashes on this line
for(float f : data) this->data.push_back(f);
}
在什么情况下vector :: clear()会导致seg错误?我最初有
void A::set(const vector<float>& data){
this->data = data;
}
并遇到了同样的问题。我切换到上面调试。 这是在gcc 4.7.2,x86_64
上答案 0 :(得分:3)
IF 它会在调用'data.clear'时严重崩溃(我的意思是,正好在这一行,而不是在明确的内部),请务必检查this
指向断层线的指针。
如果由于先前错误的累积影响,你的$ this为null或者是垃圾值,那么这一行可能会出现类似行为。
在(几乎)另一方面,如果它实际上在clear中的某个地方崩溃,你只是切断了堆栈跟踪以使问题描述更加简洁,那么仍然可能是同样的原因。
您可以在调试器中轻松检查'this'指针是否为NULL。此外,检测垃圾值并不难:向A
类添加一些测试字段,在构造函数中填充一些可预测的BUT NOT CONSTANT值,当应用程序崩溃时,检查this-&gt; mytestvalue是否正常。如果$ this被删除,那么指向的测试值通常几乎是随机的。
答案 1 :(得分:2)
可能这是由于其他地方发生堆栈/内存损坏。您应该使用内存检查程序运行程序,例如Valgrind使用memcheck
工具查看正在进行的操作。