Выделение памяти для массива - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь прочитать числа из файла и сохранить их в массиве, используя динамическую c память. Когда я пытаюсь распечатать элемент массива, он показывает адрес вместо фактического содержимого.

// 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";
    }


}

Я впервые пытаюсь что-то подобное, и я довольно застрял. Что я здесь не так делаю?

Ответы [ 2 ]

2 голосов
/ 03 мая 2020

Унарный оператор & предназначен для извлечения адреса, поэтому вполне естественно, что он показывает адрес.

Чтобы отобразить содержимое, удалите & в cout << &pFileContents[2]; и получите его показать содержимое.

Также в подсчетной части вашего кода

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

есть две ошибки.

Во-первых, вы увеличиваете count без последнего чтения, которое было успешным .

Во-вторых, вы пытаетесь прочитать из ifstream, который уже достигнут EOF. Вы должны очистить флаг EOF и искать начало файла следующим образом:

В заключение, счетная часть должна быть:

while (inputHandle >> tempIn) {
    count++;
}
inputHandle.clear();
inputHandle.seekg(0, ios_base::beg);
1 голос
/ 03 мая 2020

Я вижу, что вы пытаетесь напечатать требуемое значение, используя:

cout << &pFileContents[2];

Так как pFileContents является массивом, pFileContents[2] получит доступ ко второму элементу (значению) этого же. Но так как вы добавили & перед элементом, он будет печатать адрес второго элемента массива.

Чтобы напечатать значение второго элемента массива, просто используйте :

cout << pFileContents[2];

Обратите внимание на разницу в более позднем коде, мы не использовали & сразу после cout <<

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...