C 细分故障访问类数据成员,而无需明确使用指针
C++ Segmentation Fault accessing class data member without explicit use of pointers
注意:已经提出了类似的问题,但是我发现的几乎所有问题似乎都直接使用指针,这在这里可能无关紧要
对于这个代码段
#include <iostream>
#include <string>
#include <vector>
#include <map>
using namespace std;
class Unit{
public:
string name;
char value;
vector<Unit> inner;
Unit(string Name){
name=Name;
}
Unit(char Value){
name="Character";
}
};
class Instruction{
public:
int size;
string type;
string value;
map<string, vector<Unit>> vars;
vector<Instruction> inner;
vector<Instruction> outer;
Instruction(string Type,string Value,vector<Instruction>& Outer,map<string, vector<Unit>> &Vars){
type=Type;
value=Value;
outer=Outer;
vars=Vars;
size=0;
}
Instruction(string Type,vector<Instruction>& Outer,map<string, vector<Unit>> &Vars){
type=Type;
outer=Outer;
vars=Vars;
size=0;
}
bool matches(vector<Unit> &info,int position=0, int vectLocation=0){
cout<<value<<'n'; //Segmentation Fault Occurs Here
return false;
}
};
void breakUp(vector<Unit>&u,string s){
for(int i=0;i<s.size();i++){
u.push_back(Unit(s[i]));
}
}
int main(){
//String to be matched
vector<Unit> v;
breakUp(v,"For the love of tests");
//Instruction Vector
vector<Instruction> i;
//Var Vector
map<string, vector<Unit>> x;
//Add initial instruction
Instruction constant("Constant","",i,x);
constant.inner.push_back(Instruction("String","For the love of tests",constant.inner,x));
//Test match
bool result=i[0].matches(v);
if(result==true){
cout<<"Match Truen";
}else{
cout<<"Match Falsen";
}
return 0;
}
尝试访问matches
函数中的一个数据成员时,我会发现一个分段故障。当它尝试打印size
或type
时,也会发生这种情况。我无法辨别此内存问题的确切原因,并会提出任何建议或注意事项。
vector<Instruction> i; ... bool result=i[0].matches(v);
i
是空的,因此访问i[0]
会产生未定义的行为。
sigsegv的原因似乎是
bool result=i[0].matches(v);
当您做
时vector<Instruction> i;
创建了一个新的std::vector
对象,尺寸为0。
现在,当您尝试通过上述语句访问第一个元素时,它可能会给出分段错误。
建议:
1)在构造函数中使用const std::string &
代替std::string
。使用std::string
将导致字符串复制两次(这对性能不利)。
相关文章:
- 初始化指向类实例的智能指针并访问其方法
- 从纯虚拟类 (A) 派生的指针无法访问来自纯类 (B) 的重载方法
- 使用智能指针读取访问冲突
- 是否通过单元化指针UB访问静态类成员
- 如何在使用对象指针时访问成员函数
- 通过指针算法访问结构数据成员
- 在向量中使用共享指针来访问类对象
- 尝试通过指针映射访问类成员
- 如果基类指针无法访问派生类成员函数,那么多态性有什么方便的呢?
- 为什么基指针可以访问虚拟函数中的派生成员变量
- 直接从指针/地址访问数组的元素
- 在 c++ 中,为什么 -> 被称为二进制中缀指针成员访问运算符?
- 将模板化对象指针存储在矢量中并通过基类指针进行访问
- 从指针队列访问结构的成员
- 使用指针循环访问 RAM
- C++父方法对子指针的访问
- 在指向结构的指针中访问指向整数的指针
- 在堆上创建对象,并通过程序的其余部分通过指针容器访问
- 通过使用智能指针阅读访问违规行为
- C 细分故障访问类数据成员,而无需明确使用指针