尝试从方法返回指向对象的指针时出现分段错误
Segmentation fault while trying to return a pointer to object from a method
g++在我试图从classA的方法返回classB的对象时抛出"segmentation fault"。我不知道如何修复这个错误,如果有人能告诉我为什么会发生这个错误,我将不胜感激。所以…这是代码:
classA.h
#include "classB.h"
#ifndef _CLASS_A_H_
#define _CLASS_A_H_
class ClassA{
private:
int id;
ClassB *ptr_classB;
public:
ClassA();
ClassA(int id, std::string name);
inline void setID(int id){this->id = id;}
inline int getID(){return this->id;}
inline ClassB getClassB(){return this->ptr_classB;}
};
#endif
classA.cpp
#include "classA.h"
#include "classB.h"
ClassA::ClassA(){
this->id = 0;
ptr_classB = new ClassB();
}
classB.h
#ifndef _CLASS_B_H
#define _CLASS_B_H
class ClassB{
private:
std::string name;
public:
ClassB();
inline std::string getName(){return this->name;}
};
#endif
classB.cpp
#include <string>
#include "classB.h"
ClassB::ClassB(){
this->name = "default";
}
main.cpp
#include <iostream>
#include "classA.h"
using namespace std;
int main(){
ClassA *ptr_classA = new ClassA();
cout << ptr_classA->getClassB().getName() << endl;
//asd
return 0;
}
Makefile
SRC=SRC
INC=包括
OBJ=目标
BIN=仓
LIB=LIB
CXX=g++
CPPFLAGS=-c-I$(INC)/-std=c++11
全部:$(BIN)/主
$(BIN)/main:$(OBJ)/main.o
$(CXX) -o $(BIN)/main $(OBJ)/main.o -Llib/ -lclasses
$(OBJ)/main.o:$(SRC)/main.cpp
$(CXX) $(CPPFLAGS) $(SRC)/main.cpp -o $(OBJ)/main.o
$(OBJ)/calassA.o:$(SRC)/classA.cpp$(INC)/cclassA.h$(INC)/classB.h
$(CXX) $(CPPFLAGS) $(SRC)/classA.cpp -o $(OBJ)/classA.o
$(OBJ)/classB.o:$(SRC)/classB.cpp$(INC)/cclassB.h
$(CXX) $(CPPFLAGS) $(SRC)/classB.cpp -o $(OBJ)/classB.o
$(LIB)/libclasses.a:$(OBJ)/classA.o
ar rsv $(LIB)/libclasses.a $(OBJ)/classA.o
已清理代码:
class ClassA ;
class ClassB ;
class ClassB{
private:
int n;
public:
ClassB();
inline void set_n(int n){this->n =n;}
inline int get_n(){return this->n;}
};
class ClassA{
private:
ClassB *ptr_classb;
public:
ClassA();
inline ClassB getClassBObject(){return *ptr_classb;}
};
ClassB::ClassB(){
this->n = 0;
}
ClassA::ClassA(){
ptr_classb = new ClassB();
}
#include <iostream>
int main(){
ClassA *ptr_classA = new ClassA();
std::cout << ptr_classA->getClassBObject().get_n() << std::endl;
return 0;
}
在COMPIL时间更正错误后,编译和执行都很好,这让我想知道:你到底是怎么编译得到segfault的?
相关文章:
- 为什么我在空指针错误(链表)中获取成员访问权限
- std::函数指针错误:无法将 &A::a 转换为类型 std::function<>&&
- 为什么我得到 munmap_chunk():无效的指针:错误
- 成员模板函数指针错误
- 删除指针时,未分配被释放的 C++ 指针错误
- Visual Studio 中的"指向引用的指针"错误不会按发生位置的文件名显示
- C++数组指针错误无法将“int*”转换为“int**”
- C++ 通过函数指针错误调用成员函数
- 从 BST 中删除元素(指针错误)
- 随机生成的多维布尔指针错误
- 在测试中使用unique_ptr时指针错误无效
- 使用 malloc 而不是 new 会导致 free():指针错误无效
- 非标准语法;使用 '&' 创建指向成员的指针错误,将成员函数分配给向量时出错
- 抽象类和唯一指针 c++ 错误
- 返回函数指针错误而不带类型定义
- 练习中出现空指针错误
- 指针错误导致的分段错误(简单..)
- free():C++中的指针错误无效
- 使用布尔值数组"表达式必须具有指向对象类型的指针"错误C++
- 指针错误的C 数组