我想爲基於embedded device
的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 fault
消息。我認爲其中一個操作系統,編譯器或庫可能已經損壞。我不知道如何找到問題。
有什麼不對?
你應該創建一個最小的工作示例和** **複製該例如進入問題,而不是輸入類似的東西。代碼的語法錯誤指示了另一個錯字(您已經糾正了錯誤),並且糾正語法會生成一個有效的程序,該程序不應該顯示所示的行爲,這似乎表明代碼至少有一處不同。 – 2012-01-30 12:56:41
在修正了類定義中缺少的「;」之後,使用'mips-linux-gnu-g ++'編譯時,MIPS系統上的代碼運行良好。 – markgz 2012-01-30 18:58:20
@markgz:'mipsel-elf-g ++'和'mips-linux-gnu-g ++'有什麼區別?我的嵌入式設備操作系統不是Linux。我可以使用'mips-linux-gnu-g ++'而不是'mipsel-elf-g ++'嗎? – 2012-01-31 10:18:34