gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:53 26 4
gpt4 key购买 nike

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

示例文件可能如下所示:

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 调用这个程序:./program

我已经使用 gdb 运行它并进行了回溯。它总是指向“字符串输入;”这一行

有什么办法可以解决这个段错误吗?谢谢

最佳答案

map 是一个 VLA,分配在堆栈上,所以我猜你的问题是堆栈溢出。 gdb 指向 input 的构造,因为这是在这个溢出堆栈上构造的第一件事。

关于c++ - 取决于字符串长度的段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2149475/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com