我需要一点调试。代码是100%编译就绪的。但是,如果给出要压缩的文档的一小段片段,它会崩溃,当它解压缩时会出现关于边界检查的错误。我有点害怕运行它。这并不危险,但这是我现在的杰作。它正好处于压缩技术的最佳位置。这是我编造的。它使用微积分推导算法来获取数百万个独特的密钥。这些都是可以预测的。因为它们是独一无二的,所以我不能通过在哈希中多次使用钥匙来搞砸它。这段代码的目的是生成一个完全再生的散列,并且不会给压缩带来任何损失。谢谢。
|-PQR
|-LMN
|-XYZ
|- ABC
|-EFG
|-ABC
答案 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 ++可以在不使用强制转换的情况下编写。
(可能还有其他错误,只有这一个在第一次阅读时突出了我。修复所有这些并再试一次。)