【发布时间】:2013-07-10 21:45:13
【问题描述】:
我有一个庞大的库,我试图理解它,但在进行一些单元测试(提升)时遇到了一个问题:内存访问冲突没有映射到错误的地址。
为了解释它们结构的相关部分以及我试图做什么,想象一下:
struct A {int x;}
class B { public: A *a; A(something_else) { some_function;} }
在我的主文件中,我初始化了一个 A 对象并打印 A.a->x(我得到 0)。如果我写 A.a->x=0,没问题。如果我尝试以任何方式修改该值,我会收到上述错误...这是怎么回事?另外,我不想修改他们的代码,但我确实需要增加那个 x。
【问题讨论】:
-
结构 A { int x; }
-
成员变量
a似乎没有被初始化为任何东西 - 它需要指向一些有效的内存来存储 int... -
显示真实代码。将其简化为您能想出的最小示例,该示例可以编译并运行并演示问题。
-
“some_function”利用了超过 3 个源文件中的其他函数,并且所有函数的长度都为数十行......我想使用他们的库,而不是理解它或修改它。我只是想知道可能导致问题的原因是什么?
-
你说:“如果我写 Aa->x=0,没问题。如果我尝试以任何方式修改该值,我会收到上述错误......” - 那是什么意思是什么意思???
A.a->x=0试图修改x。你说它给你“没问题”。然而在下一句中,您说任何修改x的尝试都会给您一个错误。这是自相矛盾的。那么,它是什么:“没问题”或“给出错误”???