C++ Valgrind说写东西无效,但我';我只是给一个字符串赋值

C++ Valgrind说写东西无效,但我';我只是给一个字符串赋值,c++,valgrind,C++,Valgrind,我已经这样做了半天了,不明白瓦尔格兰德为什么不高兴 瓦尔格兰德抱怨道: ==25658== Invalid write of size 4 ==25658== at 0x40242F: MyObject::copy(MyObject const&) (MyObject.cpp:96) ==25658== by 0x402264: MyObject::operator=(MyObject const&) (MyObject.cpp:40) MyObject.cpp:9

我已经这样做了半天了,不明白瓦尔格兰德为什么不高兴

瓦尔格兰德抱怨道:

==25658== Invalid write of size 4
==25658==    at 0x40242F: MyObject::copy(MyObject const&) (MyObject.cpp:96)
==25658==    by 0x402264: MyObject::operator=(MyObject const&) (MyObject.cpp:40)
MyObject.cpp:96在我的复制函数中

 94 void MyObject::copy(const MyObject & other)
 95 {
 96         myVariable = other.myVariable;
MyObject.cpp:40位于赋值运算符中

 36 MyObject & MyObject::operator=(const MyObject & other)
 37 {
 38         if (this != &other)
 39         {
 40                 copy(other);
 41         }
 42         return *this; 
 43 }
MyVariable的类型为String

 17 class MyObject
 18 {
 19         public:
 20 
 21         /** My Variable */
 22         string myVariable;

我看不出Valgrind为什么会发现这段代码有问题。我遗漏了什么?

这原来是我在数组边界之外写的东西


Yochai,谢谢你的评论。这就是问题所在。对象从未初始化,因为它被分配给数组的无效索引。

是否初始化了“其他”对象?能否构造一个最小但完整的测试用例来演示问题?我正在研究Yochai的建议,他可能是对的。我可能太依赖Valgrind了——是时候发布调试语句了。Yochai,你是对的。我只需要输入一些打印的声明来找出哪里出了问题。如果你回答这个问题,我将删除我的答案,并将你标记为已接受。谢谢你帮我早点上床睡觉!