带有地图和矢量c ++的分段故障11

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有地图和矢量c ++的分段故障11相关的知识,希望对你有一定的参考价值。

我试图从给定的文本中获取频率表。但输出显示分段错误11.我不知道为什么。我是新手。我们非常感谢您对代码的帮助。您可以编辑我的代码,以便让我学习更好的编写代码的方法。非常感谢。

#include<iostream>
#include<map>
#include<string>
#include<vector>

void make_table(vector<pair<char, int> > &table , string path){
    string text = "Hello thusnvkj.ernbuilvgqboipghq3pojavnaj.,fbvlkarebihfg094why091[3tugjvlksbdfv  ajklvrpt-30qjhrgiaoehk.BL;H]IH;LGBJSFDNOWI;HBPWRHGB;ORTWIHGOQHRWI0TUGJRLKEWHUGIH49P0-IT302-UR9GM,NXM,BNX,MNMB/E/RGP'KGP34OR[2=O-O-=0-3-1I0-439890375892R0U;L.GNLS.N.SVMS/FS/FKWEP[IF0W))_*(&*(^^&$%#^%$&%*(^*&)(*)_*_(()())))]]'";
    map<char, int> m;
    for(int i=0; text[i]!=''; i++){
        m[text[i]]++;
    }
    map<char,int>::iterator it;
    int j=0;
    for(it=m.begin();it!=m.end(); it++){
        table[j].first=it->first;
        table[j].second=it->second;
        j++;
        //cout << it->first << "   " << it->second << endl;
    }
    return;
}
int main(){
    vector<pair<char , int> > table;
    string path;
    //cin >> path;
    path= "Hi";
    make_table(table, path);
    // make_table function will give us the sorted table(vector of pair) in the decreasing order of frequency of a character.
    /*for(int i =0; i<table.size(); i++){
        cout << table[i].first << "     " << table[i].second << endl;
    }
    */
    return 0;
}
答案

您收到错误,因为您尝试访问空向量中的元素

table[j].first=it->first;
table[j].second=it->second;

在这里,您可以在for循环外添加一行

table.resize(text.size());

以上是关于带有地图和矢量c ++的分段故障11的主要内容,如果未能解决你的问题,请参考以下文章

如何使用自动工具编译带有 clang 和选项 -std=c++11 的项目

通过共享内存和管道的 IPC 给出分段错误:C 中的 11

带有标签和 Viewpager 的 Android 片段

带有向量和字符串的 C++ 分段错误

分段故障核心转储...?

使用 Weverything 和 C++11 时与 clang 冲突的警告 [重复]