-2

我有一个巨大的库,我试图理解它,在做一些单元测试(提升)时遇到了一个问题:内存访问冲突没有在错误地址映射。

为了解释它们结构的相关部分以及我试图做的事情,想象一下:

struct A {int x;}
class B { public: A *a; A(something_else) { some_function;} }

在我的主文件中,我初始化了一个 A 对象并打印 Aa->x(我得到 0)。如果我写 Aa->x=0,没问题。如果我尝试以任何方式修改该值,我会收到上述错误...这是怎么回事?另外,我不想修改他们的代码,但我真的需要增加那个 x。

4

1 回答 1

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;
于 2013-07-10T21:48:56.497 回答