为数组分配内存

问题描述 投票:0回答:2

我正在尝试从文件中读取数字,然后使用动态内存将其存储在数组中。当我尝试打印数组的成员时,它显示的是地址而不是实际内容。

// CLASS METHOD IMPLEMENTATIONS
#include "DataHousing.h"

// CONSTRUCTORS
DataHousing::DataHousing() {

}

void DataHousing::FillArray() {
    int tempIn = 0;
    int count = 0;

    // attempt to open the file with read permission
    ifstream inputHandle("NumFile500.txt", ios::in);

    // count how many numbers are in each file
    if (inputHandle.is_open() == true) {
        while (!inputHandle.eof()) {
            inputHandle >> tempIn;
            count++;
        }

        // allocate memory for array
        int* pFileContents = new int[count];

        // fill array
        while (!inputHandle.eof()) {
            for (int i = 0; i < count; i++) {
                inputHandle >> pFileContents[i];
            }
        }

        cout << &pFileContents[2];
    }

    else {
        cout << "error";
    }


}

这是我第一次尝试这样的事情,我非常困惑。我在这里错了吗?

c++ oop file-io dynamic-memory-allocation
2个回答
2
投票

一元&运算符将检索地址,因此显示地址是很自然的。

要显示内容,请删除&中的cout << &pFileContents[2];并显示内容。

也是代码的计数部分

while (!inputHandle.eof()) {
    inputHandle >> tempIn;
    count++;
}

有两个错误。

首先,您正在递增count,而最后一次读取没有成功。

第二,您正在尝试从EOF中已经读取的ifstream中读取。您必须清除EOF标志,并像这样查找文件的开头:

最后,计数部分应为:

while (inputHandle >> tempIn) {
    count++;
}
inputHandle.clear();
inputHandle.seekg(0, ios_base::beg);

1
投票

我发现您正在尝试使用以下命令打印所需的值:

cout << &pFileContents[2];

由于pFileContents是一个数组,所以pFileContents[2]将访问相同的第二个元素(值)。但是由于您已经在元素前面加上了&,所以它将打印出数组第二个元素的地址。

为了打印数组第二个元素的值,只需使用:

cout << pFileContents[2];

注意后面的代码的区别,我们在&之后还没有使用cout <<

© www.soinside.com 2019 - 2024. All rights reserved.