繁体   English   中英

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

[英]runtime error in vc++ but not in gcc

我的程序可以使用gcc完美运行,但是在Visual Studio 2017中会给出“向量下标超出范围”的运行时错误。在使用调试器时,它在函数调用countWords(&v, "hello");上显示错误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,因此您肯定超出范围,从而导致Undefined Behavior

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM