Bounds check-out of bounds

时间:2015-11-27 00:59:51

标签: c++ hashcode lossless-compression

我需要一点调试。代码是100%编译就绪的。但是,如果给出要压缩的文档的一小段片段,它会崩溃,当它解压缩时会出现关于边界检查的错误。我有点害怕运行它。这并不危险,但这是我现在的杰作。它正好处于压缩技术的最佳位置。这是我编造的。它使用微积分推导算法来获取数百万个独特的密钥。这些都是可以预测的。因为它们是独一无二的,所以我不能通过在哈希中多次使用钥匙来搞砸它。这段代码的目的是生成一个完全再生的散列,并且不会给压缩带来任何损失。谢谢。

 |-PQR
    |-LMN
        |-XYZ
           |- ABC
        |-EFG
    |-ABC

2 个答案:

答案 0 :(得分:2)

最后一个while循环正在访问索引1(包括!)btrace.size()

bn=0;

while (bn<=btrace.size()-1) {
    bn++;
    delta = (long&)btrace[bn];
    out << (const char)(long&)delta;
}

bn++;移动到循环的末尾,就像在所有其他循环中一样。

我必须同意user4581301,使用<= size-1代替< size看起来很奇怪。

答案 1 :(得分:0)

(int &)beta是个错误。这是违反严格别名规则的reinterpret_cast。可能它也会越界;例如bitset<8>可能只有1个字节大,但(int &)beta将读取该内存位置的4个字节。

相反,您应该使用beta.to_ulong()。你在几十个地方犯了同样的错误。

从代码中删除所有强制转换。使用强制转换(特别是C风格的演员表)告诉编译器“如果这是一个错误,请不要警告我,我知道我在做什么”。但实际上你不知道自己在做什么。大多数情况下,C ++可以在不使用强制转换的情况下编写。

(可能还有其他错误,只有这一个在第一次阅读时突出了我。修复所有这些并再试一次。)