双重释放或损坏错误(找不到错误?
double free or corruption error (Can't find error?)
我正在尝试创建一个类,该类将从文件中读取并计算三元组的频率,但由于某种原因,我得到了这个双重释放或损坏错误,它使Visual Studio Code崩溃。
这是.cpp
frequency::frequency(std::ifstream &infile)
{
freqValue(infile);
}
std::vector<int> frequency::freqValue(std::ifstream &infile)
{
std::vector<int> freqs(17576);
char ch;
while(infile.get(ch))
{
ch = tolower(ch);
if(((ch -'a') >= 0 && (ch-'a') <= 26)) letters.push_back(ch);
}
int result = 0;
for(size_t i = 0; i < letters.size() - 2; i++)
{
result += ((int) (letters[i] - 'a') *676);
result += ((int)(letters[i + 1] - 'a') * 26);
result += ((int)(letters[i+2] - 'a'));
if (result == 17576) result -= 1;
freqs[result] += 1;
std::cout << freqs[result];
result = 0;
}
return freqs;
}
这是主要的
int main(int argc, char *argv[])
{
if(argc > 0)
{
std::ifstream infile;
infile.open(argv[0]);
frequency i(infile);
return 0;
}
}
和标题
class frequency
{
private:
std::vector<char> letters;
std::vector<int> frequencies;
public:
frequency(std::ifstream &infile);
std::vector<int> freqValue(std::ifstream &infile);
};
#endif
我在您的程序中看到了 2 个问题。
第一:
for(size_t i = 0; i < letters.size() - 2; i++)
应改进此循环的条件:
for(size_t i = 0; i + 2 < letters.size(); i++)
由于 i
和 letters.size()
都是无符号的,因此大小为 1 或 0 将提供下溢和越界访问权限。
第二个问题我们不知道您的数据集,但我不明白为什么result
不能大于17576
(例如letters
中的 26 "z"会成功(,因此您至少应该检查一下并报告诊断。如果您不希望在发布模式下进行检查,则可以使用 assert 执行此操作。
我找到了解决方案,结果检查的数学,我已经检查了很多次,但问题是
if(((ch -'a') >= 0 && (ch-'a') <= 26)) letters.push_back(ch);
它应该是 25 而不是 26,否则它将使 ASCII 值也高于 Z,这将允许它超过 17576 出错。感谢您的所有投入,感谢您的帮助
相关文章:
- 静态链接库时,收到链接器错误:找不到 -lgcc_s
- C++ ZBar cmake 错误"找不到文件"时包括
- GTK+3 编译错误"找不到信号处理程序",您是否使用 -rdynamic 进行了编译?
- SWIG c++ 到 C# 错误找不到入口点SWIGRegisterExceptionCallbacks_xxxx
- NDK R20 LD:LD:错误:找不到-lpthread
- 双重释放或损坏错误(找不到错误?
- 错误找不到-lglu
- 错误:找不到匹配的超载函数
- 生成文件错误 - 找不到文件 - *.cpp
- Qt 创建器错误:找不到 -lopencv_imgcodecs
- 无法配置 AGENT++ 配置: 错误: 找不到合适的 libsnmp++ 库
- CMake 错误:找不到变量.ACE_INCLUDE_DIR(高级)
- CMake 包含错误(找不到文件、未定义引用)
- 链接错误:找不到__thiscall函数符号,但定义了__cdecl函数符号
- 运行时错误:找不到与 ImageSensor 匹配的 Python 模块
- 编译错误:找不到库
- CMake错误:找不到包含目录和库
- Mac OSX:构建opencv_contrib致命错误:找不到文件 opencv2/core.hpp
- Qt 创建者编译错误"找不到 UIC.exe从 msvc 2012 路径"
- Ubuntu - 链接 boost.python - 致命错误:找不到 pyconfig