VC 中的运行时错误,但不在GCC中
runtime error in vc++ but not in gcc
i具有此程序,该程序使用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
,引起:
向量下标超出范围
正如您提到的。
h
将给出索引104,而您的向量的大小为26,因此您肯定会超出范围,导致。。
相关文章:
- 删除指向指针的指针是运行时错误吗
- c++中的指针和运行时错误
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 在同一模拟中使用静脉和静脉_ inet内容时出现运行时错误
- 对单向链表进行排序时出现运行时错误
- 为什么此代码存在运行时错误?
- 你能解释一下什么运行时错误是如何解决它的吗?
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 为什么程序在 c++ 中迭代 emtpy 向量时会抛出运行时错误
- 运行时错误:引用绑定到类型为"int"的空指针
- 为什么当 vector 为空时会显示运行时错误?
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 运行时错误:矢量下标超出范围:正在检查空集
- 分配给gslice_array会导致运行时错误
- cout 新创建的对象引发运行时错误
- C++在使用std::multimap时出现运行时错误的几率很小
- 运行时错误:引用绑定到类型"int"的未对齐地址0xbebebebebebebec6,这需要 4 个字节对齐 (stl_vector.h)
- 试图找出为什么我会收到运行时错误?
- VC 中的运行时错误,但不在GCC中
- 使用MinGW gcc/g++(nuwen发行版)编译的程序出现运行时错误