Conditional jump or move depends on uninitialised value(s)-1

问题是这样的:


|Conditional jump or move depends on uninitialised value(s)
| at 0x4A0A23B: strstr (mc_replace_strmem.c:1367)
| by 0x40123F: String::find(String const&, int) const (String.cpp:84)
| by 0x401C3A: main (StringTest.cpp:40)
| Uninitialised value was created by a heap allocation
| at 0x4A07192: operator new[](unsigned long) (vg_replace_malloc.c:363)
| by 0x401444: String::operator=(String const&) (String.cpp:118)
| by 0x401B62: main (StringTest.cpp:37)
|

提示告诉我们string.cpp:84依靠没初始化的变量进行条件判断
而这个变量是在String::operator=(String const&) 函数的这一行代码(String.cpp:118)出现的
我们看看这行代码:
memcpy(_buff, other._buff, _size);
这不科学!明明初始化了的!
再看看整段代码:

 void String::operator=(const String &other) {
        _length = other._length;
        _size = other._size;
        if (_buff != NULL) delete[] _buff;

        _buff = new char[other._length + 1];
        memset(_buff, 0, _size);
        memcpy(_buff, other._buff, _size);
    }
```

明明整个string的_size都初始化了的!

结果!!!!
最后终于发现了BUG!

这个memset没有全部memset!

_size = other._size;

其实不是全部的_size,有部分的被遗漏了!

改成

_size = (_length + 1) * sizeof(src[0]);

后过了!这说明,我们得到的_size 并不是真正的_size

启示

1.在两个对象间传递数据的时候,数据量越少越好!

2.初始化了但是被说没初始化的可能是没有全部初始化!

终于解决了,楼主的苦逼之情溢于言表!
这里写图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值