我是初学者,所以如果这是一个非常愚蠢的问题,我很抱歉。 我的分配是从输入文件打印出一个动态数组。我试着谷歌搜索它,我发现了一些类似的问题...但答案都像是#34;使用矢量"等等,但我们还没有学到这些。它还说必须使用一个函数。这就是我想出的:
#include <iostream>
#include <fstream> //file input
using namespace std;
int *out(int *arr, int siz){
arr = new int[siz];
for (int i = 0; i < siz; i++) {
cout << arr [i] << " ";
}
return arr; //this should print out the array later???
}
int main(){
int siz;
int *arr;
ifstream inf ("input.txt");
inf >> siz; //
for (int i = 0; i < siz; i++) {
inf >> arr[i];
}
inf.close();
cout << "This array contains following elements: ";
*arr = *out(arr, siz) ;
delete[] arr;
return 0;}
因此,它不会给Dev-C ++带来任何错误,但是当我尝试运行它时,它会崩溃。我试过调试它然后它给了我&#34;分段错误&#34;或类似的东西。当然,我用谷歌搜索它,指针一定有问题,对吧?你能救我吗?感谢。
答案 0 :(得分:1)
arr
是一个未初始化的指针。
在将数据读入arr = new int[size];
之前,请arr
。
答案 1 :(得分:1)
当arr尚未分配或初始化为有效数组时,您正在尝试访问arr。在使用arr填充元素之前,您需要分配arr: 所以,这里是更改后的版本:
#include <iostream>
#include <fstream> //file input
using namespace std;
void out(int *arr, int siz){
for (int i = 0; i < siz; i++) {
cout << arr [i] << " ";
}
}
int main(){
int siz;
int *arr;
ifstream inf ("input.txt");
inf >> siz;
arr = new int[siz]; // added
for (int i = 0; i < siz; i++) {
inf >> arr[i];
}
inf.close();
cout << "This array contains following elements: ";
out(arr, siz);
delete[] arr;
return 0;
}
答案 2 :(得分:0)
您尚未为数组分配内存,您可能需要使用malloc
。一旦读入了数组的大小,就分配内存。
inf >> siz;
arr = malloc(siz * sizeof(*int));
//Rest of program
//delete[] arr; <- you use this with the new keyword
free(arr); //Use 'free' with malloc
return 0;
答案 3 :(得分:0)
我认为你想要的可能就像这样
#include <iostream>
#include <fstream>
int main(){
int siz(0);
std::ifstream inf ("input.txt");//Assume that the input file and this file are in the same folder
inf >> siz; //Assume that the first number in input file is the size of array
int *arr=new int[siz];
for (int i = 0; (siz-i)&&inf ; ++i) {
inf >> arr[i];
}
inf.close();
std::cout << "This array contains following elements: ";
for (int i = 0; siz -i ; ++i ) {
std::cout << arr [i] << " ";
}
delete[] arr;
return 0;
}