来自输入文件的动态数组

时间:2014-10-20 10:53:44

标签: c++ arrays function dynamic-arrays

我是初学者,所以如果这是一个非常愚蠢的问题,我很抱歉。 我的分配是从输入文件打印出一个动态数组。我试着谷歌搜索它,我发现了一些类似的问题...但答案都像是#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;或类似的东西。当然,我用谷歌搜索它,指针一定有问题,对吧?你能救我吗?感谢。

4 个答案:

答案 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;
}