저는 C++을 공부하기 시작했습니다. 지금은 포인터로 작업하고 있습니다. 나는 왜 다음 일이 일어나고 있는지 이해할 수 없다.C++의 포인터; 세분화 오류 오류 :
그래서 클래스 A와 B가 두 개 있다고 가정 해 보겠습니다. A는 정수 필드 (int valueA)를 가지고 B는 A *로 포인터 필드를가집니다. 아래에서는 두 클래스를 모두 보여 줬습니다.
class A{
A::A(int value){
valueA = value;
}
void A::displayInfo(){
cout<<A<<endl;
}
}
class B{
B::B(){
a=0;
}
void B::printInfo(){
a -> displayInfo(); //Segmentation fault
}
void B::process(){
A new_A = A(5);
a = &new_A;
new_A.displayInfo(); //correct output
a -> displayInfo(); //correct output
}
}
이제 메인 클래스에서 다음을 수행합니다. B 클래스의 인스턴스를 만들고 process() 및 print() 함수를 호출합니다. 출력에서 나는 5를 얻었고 5는 맞았고 Segmentation은 잘못되었다. 아무도 왜 이것이 일어나고 있는지 이해할 수있게 도와 줄 수 있습니까? 포인터에 대한 나의 현재의 이해에 따르면, 나는 올바른 것을하고 있습니까?
INT 주 (무효) {
B b_object();
b_object.process();
b_object.print();
}
그냥 내가 선언 A.h 및 B.h 파일이이 명확하게하기 위해 "valueA을 지능;" 및 "A * a;" 각기. 그리고 나는이 포인터없이 훨씬 쉽게 수행 할 수 있습니다 알고 있지만, 나는 포인터가 여기에 작동하는 방법을 배우려고 노력하고 있어요 : A는 (과정에서 지역 변수에 할당
클래스 정의 다음에 세미콜론이 누락되어 클래스 정의에 'Class :: Method' _를 사용하면 안됩니다. –
오류 수정하지 않고 서식을 지정하기 위해 코드를 편집했습니다. –
@MartinshShaiters : 아니야. –