Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
ToLexx
2 / 2 / 2
Регистрация: 21.10.2013
Сообщений: 203
1

Stack overflow при чтении массива из файла

26.06.2015, 10:28. Просмотров 399. Ответов 6
Метки нет (Все метки)

Доброго времени суток! Работа выполняется на VS2013. Мне необходимо открыть файл,
вытащить из него массив в 400000 значений,
провести над ним некие операции,
получившиеся значения записать в другой файл.
количество рядом массива может меняться, от файла к файлу.
имеется код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <fstream>
//#include <stdio.h>
 
using namespace std;
int main(void)
{
    setlocale(LC_ALL, "rus");
    const int row = 500000, col = 4; //задаю параметры массива кол-во строк и столбцов,
                                                   // большими нежели есть в файле
    int arr[row][col];  // задаю сам массив
    FILE *fin;  //как понимаю здесь задаётся указатель на некий участок памяти,
                      // в него занесутся значения из файла
    if ((fin = fopen("Yach.txt", "rt")) == NULL){ cout << "Не открывается файл\n"; } //проверяем наличие файла
    for (int i = 0; i < row; i++){  // перебор строк
        for (int j = 0; j < col; j++){ // перебор столбцов
            // fin >> arr[i][j]; // я хотел вытащить значения из fin в массив arr, но выдаётся ошибка:
             
             //Error    1   error C2296: '>>' : illegal, left operand has type 'FILE *' 
                        //c:\users\администратор\documents\visual studio 2013\projects\consoleapplication1\
                        //consoleapplication1\main.cpp  16  1   RWarr
 
        }
    }
    FILE *fout = fopen("YachW.txt", "wt");//файл записи
    // тут должны быть операции по записи 
 
    fclose(fin);
    fclose(fout);
    system("pause");
    return(0);
}
в итоге строка 16 считается ошибочной если её открыть. Если закоментировать, и запустить то вылезает сообщение об ошибке и открывается файл crtexe.c какой-то.
Что не так делаю((
0
Миниатюры
Stack overflow при чтении массива из файла  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2015, 10:28
Ответы с готовыми решениями:

С++ и Stack overflow при записи в файл
Есть функция, которая заполняет XML файлы и следующей упаковке их в...

При запуске выходит ошибка Stack overflow
учусь mfc v2008 с++ пишу программу для заполнения массива цветами пикселей...

Stack overflow при создании большого количества объектов
Здравствуйте Товарищи! Выскакивает ошибка:&quot;Необработанное исключение в...

Ошибка при чтении массива из файла
Доброго времени суток всем участникам форума! При написании программы...

Ошибка при бинарном чтении массива структур из файла
Здравствуйте! Написал программу, которая бинарно записывает и считывает массив...

6
zss
Модератор
Эксперт С++
7178 / 6677 / 4226
Регистрация: 18.12.2011
Сообщений: 17,622
Завершенные тесты: 1
26.06.2015, 10:32 2
Цитата Сообщение от ToLexx Посмотреть сообщение
int arr[row][col]; // задаю сам массив
Такой массив не влезает в стек.
Создавайте его динамически
См. образец
Образцы (шаблоны) программ для типовых задач
1
ToLexx
2 / 2 / 2
Регистрация: 21.10.2013
Сообщений: 203
26.06.2015, 15:14  [ТС] 3
так с размером понял.
А как быть с передачей значений из файла в массив.
Кроме того я малёк запутался с вариантами реализации всей процедуры считывания информации из файла.
есть варианты типа моего
C++
1
FILE * fin.open("file.txt", "r");
используемый с заголовком <fstream>,
а есть ещё реализации с использованием <ifstream> и <ofstream> ifstream file("text.DAT")
также я так понимаю есть некие другие библиотеки, в которых также описаны процедуры чтения/записи файла.
Подскажите какой вариант, когда используется.
Кроме того, имеется ли какой-нибудь ресурс, где о работе с файлами и заголовках к ним было бы нормально всё описано.
ЗЫ: есть ли готовое решение для построения графиков?

Добавлено через 7 минут
Еще вопрос относительно указанного примера:
указатель позволяет оперировать не всем объёмом массива, а лишь адресом на массив - это я понял.
Но вот к чему **массив, везде пишут о гибкости и необходимости, а толкового пояснения не встретил,
***массив же уже называют фейком и идиотизмом))

Добавлено через 1 час 46 минут
Ещё вопрос size_t это стандартный тип из библиотеки <cstdlib>, и он принимает значение равное разрядности компьютера. Правильно?

Добавлено через 2 часа 32 минуты
СвЯтила с++ снизойдите до мелкого меня ))
0
zss
Модератор
Эксперт С++
7178 / 6677 / 4226
Регистрация: 18.12.2011
Сообщений: 17,622
Завершенные тесты: 1
26.06.2015, 15:27 4
Не понятно, что Вас смущает.
C++
1
int** a;
Это указатель на массив, в котором хранятся адреса строк матрицы.
Соответственно, каждый из них содержит адрес первого элемента строки.
Обращаться к элементу такого массива можно обычным образом a[i][j]
или, если очень захочется): *(*(a+i)+ j)

А size_t - это некий беззнаковый тип, зависящий от разрядности компьютера.
Но мне кажется, что это просто unsigned int
1
ToLexx
2 / 2 / 2
Регистрация: 21.10.2013
Сообщений: 203
26.06.2015, 15:34  [ТС] 5
Цитата Сообщение от zss Посмотреть сообщение
*(*(a+i)+ j)
простите это шутка или реально работает, на всякий случай спрашиваю.
0
zss
Модератор
Эксперт С++
7178 / 6677 / 4226
Регистрация: 18.12.2011
Сообщений: 17,622
Завершенные тесты: 1
26.06.2015, 16:03 6
Смотрите *(a+i) - это адрес i-ой строки,
прибавляем к нему j получаем адрес j - го столбца i-ой строки
Осталось всю эту конструкцию разыменовать.
0
lss
930 / 859 / 355
Регистрация: 10.10.2012
Сообщений: 2,705
26.06.2015, 20:24 7
Цитата Сообщение от ToLexx Посмотреть сообщение
Подскажите какой вариант, когда используется.
Это функции Си:
Цитата Сообщение от ToLexx Посмотреть сообщение
FILE * fin.open("file.txt", "r");
Это потоки С++:
Цитата Сообщение от ToLexx Посмотреть сообщение
ifstream file("text.DAT")
Цитата Сообщение от ToLexx Посмотреть сообщение
Кроме того, имеется ли какой-нибудь ресурс, где о работе с файлами и заголовках к ним было бы нормально всё описано.
Литература C++
0
26.06.2015, 20:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2015, 20:24

"Нарушение прав доступа при чтении по адресу" при чтении структур из бинарного файла
Пытаюсь разобраться со структурами в бинарных файлах. Допустим, есть массив...

Stack overflow.
У меня в программе есть реверсивная функция (много параметров) она вызывает...

stack overflow in C++
#include&lt;iostream&gt; #include&lt;cmath&gt; using namespace std; int main() { int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru