gpt4 book ai didi

c++ - 双重释放或损坏错误(找不到错误?)

转载 作者:太空宇宙 更新时间:2023-11-04 12:49:24 24 4
gpt4 key购买 nike

我正在尝试创建一个类,该类将从文件中读取并计算三元组的频率,但由于某种原因,我遇到了双重释放或损坏错误,它使我的 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++)

因为 iletters.size() 都是无符号的,大小为 1 或 0 将导致下溢和越界访问。

第二个问题我们不知道你的数据集,但我不明白为什么 result 不能大于 17576(例如 中的 26 'z' letters 会成功)所以你至少应该检查一下并报告诊断结果。如果您不希望在 Release模式下进行检查,您可以使用 assert 来做到这一点。

关于c++ - 双重释放或损坏错误(找不到错误?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49778998/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com