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,你是对的。我只需要输入一些打印的声明来找出哪里出了问题。如果你回答这个问题,我将删除我的答案,并将你标记为已接受。谢谢你帮我早点上床睡觉!