ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

c-分段错误取决于字符串长度?

2019-10-13 13:05:29  阅读:198  来源: 互联网

标签:c arrays string segmentation-fault getline


我正在编写一个程序,该程序将使用getline将infile中的行读取为字符串,将字符串转换为包含字符串的前m个非空白字符的c字符串,然后将c字符串连接为单个char数组.

一个示例文件可能看起来像这样:

5    //number of rows and columns in a grid
2    //number of grids
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX

XXXXX
XXXXX
XXXXX
XXXXX
XXXXX

因此,我最终得到一个2x5x5字符的char数组.
现在的问题是我的代码在较小的测试用例(如上面显示的示例)上可以正常工作,但是当我在较大的网格(即100x100x100)上尝试时,分段错误.

#include <iostream>
#include <string>
using namespace std;
int main(){
  int mapsize,levels;
  cin>>mapsize;
  cin>>levels;
  char map[mapsize*mapsize*levels];
  string input;
  for (int i=0;i<levels;i++){
    for (int j=0;j<mapsize;j++){
      getline(cin,input);
      char *row;
      row=new char[input.size()+1];
      strcpy(row, input.c_str());
      for (int k=0;k<mapsize;k++){
        map[i*mapsize*mapsize+j*mapsize+k]=row[k];
      }
      delete [] row;
    }
  }
return 0;
}

我会用一个infile调用该程序:
./程序< infile.in 我已经使用gdb运行它并做了回溯.
它始终指向“字符串输入”行;

有什么想法可以解决此段错误吗?
谢谢

解决方法:

map是在堆栈上分配的VLA,因此我想您的问题是堆栈溢出. gdb指出了输入的构造,因为这是在此溢出堆栈上构造的第一件事.

标签:c,arrays,string,segmentation-fault,getline
来源: https://codeday.me/bug/20191013/1908146.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有