我有一个巨大的库,我正在努力理解,并且在进行一些单元测试时遇到了问题(提升):内存访问违规没有错误地址的映射。
要解释其结构的相关部分以及我尝试做的事情,请想象一下:
struct A {int x;}
class B { public: A *a; A(something_else) { some_function;} }
在我的主文件中,我初始化一个A对象并打印A.-> x(我得到0)。如果我写A.-> x = 0,没问题。如果我尝试以任何方式修改该值,我会得到上述错误......发生了什么?另外,我不想修改他们的代码,但我真的需要增加x。
答案 0 :(得分:2)
根据你的陈述,看起来指针在使用之前没有被初始化。
A* a; // This pointer points to nothing ... meaning a == NULL / 0
int b = a->x; // ERROR! Segmentation fault!
a = new A;
int c = a->x; // Undefined
a->x = 5;
int d = a->x; // 5
/* ... */
delete a;
/* Library */
struct Bar
{
int a;
};
class Foo
{
public:
Bar* pBar;
Foo(){ }
~Foo()
{
delete pBar; // If it's null, nothing will happen
}
};
/* main.cpp */
Foo foo();
foo.pBar = new Bar;
foo.pBar->a = 5; // 5
a与pBar
无关pBar->a = 5;
转换为
*(pBar).a = 5;