gpt4 book ai didi

c++ - vc++ 中的运行时错误,但 gcc 中没有

转载 作者:搜寻专家 更新时间:2023-10-31 01:31:50 26 4
gpt4 key购买 nike

我有一个使用 gcc 完美运行的程序,但在 visual studio 2017 中出现“vector 下标超出范围”运行时错误。在使用调试器时,它在函数调用 countWords(&v, "hello");。我该如何解决?

#include <iostream>
#include <vector>
using namespace std;

struct Trie {
int prefixes;
int words;
vector<Trie*> edges;
};

typedef Trie vertex;

void initialize(vertex *v)
{
v->words = 0;
v->prefixes = 0;
v->edges.resize(26);
for (int i = 0; i < 26; i++)
{
v->edges[i] = nullptr;
}
}

void addWord(vertex* v, string word)
{
if (word == "")
{
v->words++;
}
else
{
v->prefixes++;
int k = word[0] - 'a' - 1;
if (v->edges[k] == nullptr)
{
v->edges[k] = new Trie;
initialize(v->edges[k]);
}
int word_len = word.length();
addWord(v->edges[k], word.substr(1, word_len - 1));
}
}

int countWords(vertex* v, string word)
{

char k = word[0];
if (word == "")
return v->words;
else if (v->edges[k] == nullptr)
return 0;
else
return countWords(v->edges[k], word.substr(1, word.length() - 1));
}

int main()
{
Trie v;
initialize(&v);
addWord(&v, "hello");
countWords(&v, "hello");
cin.get();
}

最佳答案

这里是:

int countWords(vertex* v, string word)
{

char k = word[0];
...
else if (v->edges[k] == nullptr)
...
return countWords(v->edges[k], word.substr(1, word.length() - 1));
}

k 等于 'h',这对于索引名为 edges 的 vector 无效,导致:

vector subscript out of range

如你所说。

h 将给出 index 104 ,并且您的 vector 大小为 26,因此您肯定会越界,导致未定义的行为

关于c++ - vc++ 中的运行时错误,但 gcc 中没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44737798/

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