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
메시지가 표시됩니다. OS, 컴파일러 또는 라이브러리 중 하나가 고장난 것 같습니다. 나는 내가 어떻게 문제를 발견 할 수 있는지 모른다.
무엇이 잘못 되었나요?
B b1;
당신은 할당됩니다 :
당신은 최소한의 작업 예와 ** 복사본을 생성해야 질문에 대한 예를 들어, 비슷한 것을 타이핑하는 것. 이 코드는 다른 오타가 있음을 나타내는 구문 오류가 있으며 구문을 수정하면 코드에 다른 하나 이상의 차이가 있음을 나타내는 표시된 동작을 나타내지 않아야하는 유효한 프로그램이 생성됩니다. –
클래스 정의에서 누락 된 ";"을 수정 한 후, 코드는'mips-linux-gnu-g ++ '로 컴파일 할 때 MIPS 시스템에서 정상적으로 실행됩니다. – markgz
@markgz :'mipsel-elf-g ++'와'mips-linux-gnu-g ++'의 차이점은 무엇입니까? 내 임베디드 장치 OS는 리눅스가 아닙니다. 'mipsel-elf-g ++ '대신'mips-linux-gnu-g ++'를 사용할 수 있습니까? –