C++调试-从文件中读取并输出2D数组
这是我到目前为止所写的,数组是动态声明的,但是当我运行时,它会出现错误,说Segmentation fault core dumped。C++调试-从文件中读取并输出2D数组,c++,C++,这是我到目前为止所写的,数组是动态声明的,但是当我运行时,它会出现错误,说Segmentation fault core dumped。 对于输入文件,第一行是4个数字:行、列、最小值、最大值,我需要将它们打印出来,并将整数放入从第二行开始的二维数组中。如何才能做到这一点?通常从预先分配的特定大小的数组开始,然后随着插入更多元素而增加容量。这意味着当一个元素挂起插入到数组中,但数组已填充到其预设容量时,您可以分配一个新的、更大的内存块,将元素从原始数组复制到新数组,再加上新元素,删除[]原始数组
对于输入文件,第一行是4个数字:行、列、最小值、最大值,我需要将它们打印出来,并将整数放入从第二行开始的二维数组中。如何才能做到这一点?通常从预先分配的特定大小的数组开始,然后随着插入更多元素而增加容量。这意味着当一个元素挂起插入到数组中,但数组已填充到其预设容量时,您可以分配一个新的、更大的内存块,将元素从原始数组复制到新数组,再加上新元素,删除[]原始数组并将其分配给新数组
<>但是,这需要内存管理,一般来说这不是C++中的一个好的实践。原因是有一些改进,比如std::vector,它是动态数组的包装器,本质上就是上面描述的那个。但是因为你是一个初学者,我想说的是,首先要掌握使用低级材料的知识,然后逐步提高。X和Y在用作数组大小和for循环的结束条件时是未初始化的……未定义的行为。为什么不改为使用向量呢?但这不是我们使用动态数组的原因吗?我们不知道数组的大小。我还没有了解向量…向量实际上在访问它们的方式上非常类似于数组。下面是一个不错的教程:
#include<iostream>
#include<fstream>
using namespace std;
int main(){
ifstream infile;
int X,Y;
char ch;
infile.open("input.txt");
int** intarray = new int*[X];
for(int i = 0; i < X; ++i)
intarray[i] = new int[Y];
for(int k=0; k<16; ++k){
for(int j=0; j<24; ++j){
infile >> intarray[k][j];
cout << intarray[k][j]<<" ";
}
cout<< endl;
}
infile.get(ch);
infile.close();
}