当函数结束时,动态分配的整数数组会自行删除

时间:2013-12-13 16:52:22

标签: c++ arrays

该函数应该从文本文件中读取整数。第一个数字将告诉输入文件中有多少个数字。

我首先将接收整数的指针初始化为NULL,但由于某种原因,当函数结束并返回时,它仍然指向NULL。

bool readFileToArray(const char* fileName, int *arr, int &size)
{
    ifstream input = ifstream(fileName);
    int i, num;

    // check if file opened successfully and allow only non negative integers to be read as num of elements
    if (!input.is_open() || !(input >> size) || size < 0)
        return wasError(input);

    // allocate an array of 'size' size
    arr = new int[size];

    for (i = 0; i < size; i++)
    {
        input >> num;

        // check for illegal input
        if (input.fail())
            return wasError(input);
        else
            arr[i] = num;
    }

    // given size and actual size mismatch
    if (i != size || !input.eof())
        return wasError(input);

    // if file opening and writing ended successfully
    return false;
}

2 个答案:

答案 0 :(得分:2)

为了返回已分配的指针,您需要使arr成为引用,否则您只是在本地泄漏指针。

变化:

bool readFileToArray(const char* fileName, int *arr, int &size)

为:

bool readFileToArray(const char* fileName, int *&arr, int &size)

还要考虑使用更多惯用的C ++,例如std::stringstd::vector,而不是C风格的char *字符串和原始数组/指针。

答案 1 :(得分:2)

使用int *arr通过 value 将指针传递给函数。当您在函数中分配arr时,您将覆盖指针的副本,而不是您传入的实际变量。

将指针传递给指针int** arr或引用指针int*& arr