Предположим, у меня есть класс, какКогда возникает segfault?
class A {
int x;
int y;
public:
getSum1() const {
return getx() + y;
}
getSum2() const {
return y + getx();
}
getx() const {
return x;
}
}
И тогда я
int main(int argc, char **argv) {
A *a = 0;
switch(argc) {
case 0:
a->getsum1();
break;
default:
a->getsum2();
break;
}
return 1;
}
Эта программа Segfault. Я заметил, что на моей машине, когда getum1 выполняется, ядро указывает, что segfault был вызван в getx, и когда getsum2 выполняет его, он говорит, что ошибка произошла в getum2.
Это имеет смысл. У меня есть 2 вопроса:
1. Это поведение указано или зависит от реализации?
И самое главное:
2. Может ли основной дамп сказать, что segfault произошел в основном, когда был разыменован? (т. е. при a-> getsum *)
Спасибо.
Duplicate-ish? http://stackoverflow.com/questions/2474018/when-does-invoking-a-member-function-on-a-null-instance-result-in-undefined-behav – GManNickG