C ++ динамический массив и чтение файлов не работают вместе

0

Такой код:

int _tmain(int argc, _TCHAR* argv[])
{
    int *test = new int[];
    ifstream f("ofile.txt");
    for (int i=0,v; i<10; i++)
    {
        f>>v;
        test[i]=1; 
        cout<<"\nv = "<<v<<", i = "<<i<<endl;
    }

    return 0;
}

вызванное этим сообщением после компиляции:

Изображение 174551

Я думаю (исправьте меня, если я ошибаюсь) вот некоторая ошибка в памяти, но подробности для меня неизвестны. Если я удалю один из них (чтение или массив файлов), он будет работать. Поэтому будет приятно услышать объяснение проблемы.

  • 0
    Вы не указали размер для своего размещения!
  • 0
    я предполагаю, что вы также имели в виду test[i]=v; не test[i]=1;
Теги:
arrays
file-io
memory
compiler-construction

2 ответа

5
Лучший ответ

Вы думаете о java. Чтобы выделить такой массив, вам нужно указать размер. например

    int *test = new int[20];

Однако лучшей схемой было бы использование вектора целых чисел.

    #include <iostream>
    #include <fstream>
    #include <vector>
    #include <algorithm>  // for sort()

    int main(int argc, char *argv[])
    {
        std::vector<int> data;
        std::ifstream fsin("ofile.txt");

        int count = 0;
        while (fsin.good())
        {
            int v;
            fsin >> v;
            if (fsin.good())
            {
                data.push_back(v);
                std::cout << "\nv = " << v << ", i = " << count++ << std::endl;
            }
        }

        std::sort(data.begin(), data.end());

        for (size_t i=0; i<data.size(); i++)
            std::cout << i << '\t' << data[i] << std::endl;

        return 0;
    }
  • 0
    Цель состоит в том, чтобы сохранить содержимое файла (он содержит числа только в каждой строке) в массиве, который может быть повторно отсортирован позднее. Я полагаю, ваш пример будет удобен после небольшого изменения. Но я все еще не могу собрать все это вместе. Пожалуйста, укажите, как это сделать.
  • 0
    @ srgg6701 - какая часть неясна? Каждый раз во время цикла вы читаете значение из файла в 'v', а затем добавляете это значение к вектору 'test'. Затем вы можете делать все, что требуется с векторными данными.
Показать ещё 4 комментария
3

Вы должны выделить массив фиксированного размера, int *test = new int[]; не должно даже работать.

Если размер известен, используйте int *test = new int[size]; , в противном случае попробуйте использовать std::vector или std:array.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню