You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++程序硬编码输入正常,读取用户输入报Segmentation fault如何解决

问题分析与解决方案

错误原因

段错误的根源是没有给vector预先分配存储空间就直接通过下标写入数据:

  • 存储目标单词的vector<string> w初始化后长度为0,直接使用w[i]写入输入的单词属于非法内存访问
  • 存储棋盘的vector<vector<char>> x初始化后长度为0,直接使用x[i][j]写入棋盘数据同样触发越界

硬编码时你使用初始化列表构造vector,会自动分配对应大小的内存,所以不会触发错误。

修复方案

只需要修改main函数中读取输入的部分,在读取长度后先给对应vector分配空间即可,修复后的代码如下:

int main()
{
    #ifndef ONLINE_JUDGE
        freopen("input.txt",  "r",  stdin);
        freopen("output.txt", "w", stdout);
    #endif    
    vector<string> w ;    
    vector<vector<char>> x;   
    int o,p;
    cin>>o;
    // 给单词vector分配o个元素的空间
    w.resize(o);
    for (int i = 0; i < o; ++i)
    {
        cin>>w[i];
    }
    cin>>p;
    // 给棋盘vector分配p行,每行p个字符的空间
    x.resize(p, vector<char>(p));
    for (int i = 0; i < p; ++i)
    {
        // 直接读取整行字符串转成字符数组,适配输入棋盘每行无空格的场景
        string s;
        cin >> s;
        for (int j = 0; j < p; ++j)
        {
            x[i][j] = s[j];
        }
    }    

    vector<string> res = findWords(x,w);
    
    for(auto i:res)
        cout<<i<<" ";  

    return 0;
}

内容的提问来源于stack exchange,提问作者Learner07

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:06:02