调用对象指针的虚函数引起的段错误

发布于 2024-12-29 11:54:04 字数 984 浏览 1 评论 0原文

我想为基于 MIPS嵌入式设备 开发一个应用程序。我正在使用 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 failure 消息。我认为操作系统、编译器或库之一可能已损坏。我不知道如何找到问题所在。

怎么了?

I want develop an application for a MIPS based embedded device. I am using mipsel-elf-g++ cross compiler. I implement a simple code as bellow.

    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() and b1.getValue() lines works successfully, but when each of a2->getValue() or b2->getValue() lines executed, I see segment fault message on the screen. I think one of the OS, compiler or library maybe are broken. I don't know how I can find the problem.

what is wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

顾北清歌寒 2025-01-05 11:54:04

你有:

B b1;

并且你正在分配:

B* b2 = &b2;

它应该是:

B* b2 = &b1;

You have:

B b1;

and you are assigning:

B* b2 = &b2;

It should be:

B* b2 = &b1;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文