ошибка сегмента, вызванная вызовом виртуальной функции указателя объекта - PullRequest
0 голосов
/ 30 января 2012

Я хочу разработать приложение для MIPS на основе embedded device. Я использую mipsel-elf-g++ кросс-компилятор. Я реализую простой код, как показано ниже.

    class A {
    public:
            virtual int getValue();
    }

    class B : public A {
    public:
            virtual int getValue();
    }

    int A::getValue() {
            return 1;
    }

    int B::getValue() {
            return 2;
    }

    int main() {

            A a1;
            B b1;
            A* a2 = &a1;
            B* b2 = &b1;

            int a_val_1 = a1.getValue();
            int b_val_1 = b1.getValue();

            int a_val_2 = a2->getValue();
            int b_val_2 = b2->getValue();

            return 0;
    }

a1.getValue() и b1.getValue() строк работают успешно, но когда каждая из a2->getValue() или b2->getValue() строк выполнена, я вижу сообщение segment fault на экране. Я думаю, что одна из ОС, компилятора или библиотеки может быть повреждена. Я не знаю, как я могу найти проблему.

что не так?

1 Ответ

2 голосов
/ 30 января 2012

У вас есть:

B b1;

и вы назначаете:

B* b2 = &b2;

Должно быть:

B* b2 = &b1;
...