Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Gelo123321
21 / 21 / 4
Регистрация: 05.01.2012
Сообщений: 282
Завершенные тесты: 1
#1

Странная ошибка в алгоритме заполнения массива из файла - C++

27.06.2014, 17:47. Просмотров 351. Ответов 12
Метки нет (Все метки)

Алгоритм приведенный ниже, на самом деле является частью функции, которая работает некорректно. По этому я решил переделать алгоритм в консольный вариант, что бы протестировать (так как я не был уверен что баг именно в этой функции, а не в другой).

Файл map1.map содержит числа, 0 и 1. Сама программа при выполнении выводит только первые 13 строк массива (причем в первой строке последний символ не 1, как в файле, а 31). работу программы прерывает ошибка (точнее окно с надписью: "Information"), вот текст сообщения: "Project C:\...\Project1.exe faulted with message: 'access violation at 0x0040337a: read of address 0x00000009'. Process Stopped. Use Step or Run to continue."Причем в C++ Builder 6, открывается вкладка библиотеки ios: _ios_base.h.

Самое странное то, что функция с данным алгоритмом которая помещена в dll - работает. То есть, по крайней мери она вызывается без ошибок. Хотя массив заполненный ею все же ведет себя странно... Что в данном алгоритме не так?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    string path = "Map/map1.map";
    int array[32-1][32-1];
 
    int x = 0, y = 0;
    ifstream file(path);
 
    if (!file) { cerr << "ERROR! Cant open a file."; }
    else
    {
        for (;file;)
        {
            file >> array[x][y];
            cout << array[x][y] << ' ';
            x++;
            if (file.get() == '\n') { y++; x = 0; cout << '\n'; }
            if (file.eof()) break;
        }
    }
    system("pause");
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2014, 17:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Странная ошибка в алгоритме заполнения массива из файла (C++):

Ошибка заполнения динамического двумерного массива - C++
При заполнении массива mas происходит выход за границы массива. По ходу исполнения программы данные записываются в ячейки и т.д. Судя по...

Написать программу заполнения двумерного массива A по схеме, результаты заполнения выдать на экран и в файл - C++
помогите, пожалуйста, написать программу заполнения двумерного массива A по схеме. Результаты заполнения выдать на экран и в файл. ...

Сделать функции заполнения исходного файла и обработки массива с записью в другой файл - C++
Здравствуйте! Требуется: Считать все числа из файла (количество чисел - произвольное) в динамический массив. Выполнить сортировку массива...

Ошибка в алгоритме - C++
Помогите найти ошибку в алгоритме. Алгоритм должен сортировать строки. void SortArrayString(string *&amp;arr, int n, char arr2) /* arr...

Ошибка в алгоритме - C++
Неправильно работает программа есть сетка (координаты x - в векторе A y - в векторе B) надо из известных точек проложить кратчайший...

функции. (ошибка в алгоритме) - C++
задание было написать программу для вычисления с заданной точностью. так вот с функцией оно не работает, т.е. результат sum и результат...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
flash1989
50 / 60 / 9
Регистрация: 03.09.2010
Сообщений: 1,242
27.06.2014, 17:52 #2
Можете приложить полный проект вместе с файлом ?
0
Gelo123321
21 / 21 / 4
Регистрация: 05.01.2012
Сообщений: 282
Завершенные тесты: 1
27.06.2014, 17:58  [ТС] #3
flash1989, конечно. В архиве 3 проекта: dll, проект который использует эту dll, и консольное приложение в котором я тестировал алгоритм.
0
Вложения
Тип файла: 7z Project Fringe.7z (936.5 Кб, 3 просмотров)
Avazart
Эксперт С++
7191 / 5365 / 280
Регистрация: 10.12.2010
Сообщений: 23,672
Записей в блоге: 17
27.06.2014, 17:58 #4
Да что не понятно выход за границы массива, проверки то нет- размер массива/ размерность того что находится в файле
0
Gelo123321
21 / 21 / 4
Регистрация: 05.01.2012
Сообщений: 282
Завершенные тесты: 1
27.06.2014, 18:02  [ТС] #5
Avazart, в файле ровно 32х32 символов разделенных пробелом. Я 10 раз проверял. Сперва и сам подумал так.
0
Avazart
Эксперт С++
7191 / 5365 / 280
Регистрация: 10.12.2010
Сообщений: 23,672
Записей в блоге: 17
27.06.2014, 18:05 #6
Сути не меняет, ошибка из-за выходы за границы массива.
0
flash1989
50 / 60 / 9
Регистрация: 03.09.2010
Сообщений: 1,242
27.06.2014, 18:06 #7
Так если ровно по 32 элемента, то почему
C++
1
 int array[32-1][32-1];
, а не
C++
1
 int array[32][32]
0
Avazart
Эксперт С++
7191 / 5365 / 280
Регистрация: 10.12.2010
Сообщений: 23,672
Записей в блоге: 17
27.06.2014, 18:06 #8
Цитата Сообщение от Gelo123321 Посмотреть сообщение
32х32
32-1 = 31
0
Gelo123321
21 / 21 / 4
Регистрация: 05.01.2012
Сообщений: 282
Завершенные тесты: 1
27.06.2014, 18:08  [ТС] #9
flash1989, а разве если массив имеет 32х32 то в нем не будет 33 элементов? От 0 же считается, или как?
0
Avazart
Эксперт С++
7191 / 5365 / 280
Регистрация: 10.12.2010
Сообщений: 23,672
Записей в блоге: 17
27.06.2014, 18:09 #10
или как .. приплыли ...

Нулевой элемент что не элемент ?
0
Gelo123321
21 / 21 / 4
Регистрация: 05.01.2012
Сообщений: 282
Завершенные тесты: 1
27.06.2014, 18:14  [ТС] #11
Avazart, на разных языках эти массивы считаются по разному.

Добавлено через 2 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
Нулевой элемент что не элемент ?
Так я же писал, что в массиве с 31 элементами, первый это 0, а последний это 31. Итого = 32 элементы.

Добавлено через 2 минуты
А проверки на размерность нету, так как я ее еще не сделал. В функцию должен был бы передаваться динамический массив, но как эго передать я не представляю, поэтому пока оставил так.
0
flash1989
50 / 60 / 9
Регистрация: 03.09.2010
Сообщений: 1,242
27.06.2014, 18:16 #12
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
от нуля считаются индексы массива, а при выделении памяти указывается к-во элементов, так что вот такие вот пироги
1
Gelo123321
21 / 21 / 4
Регистрация: 05.01.2012
Сообщений: 282
Завершенные тесты: 1
27.06.2014, 18:46  [ТС] #13
flash1989, А я то всю жизнь думал, что и выделения памяти начинается с 0(( Спасибо огромное)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2014, 18:46
Привет! Вот еще темы с ответами:

Ошибка в алгоритме сортировки - C++
Пожалуйста укажите мне ошибку в реализуемом мною алгоритме сортировки #include &lt;iostream&gt; using namespace std; int main() ...

Ошибка в алгоритме Хаффмана. С++ - C++
Проблемы с реализацией алгоритма Хаффмана. Код по идее должен быть рабочим, но выскакивает такое окно. Не знаю как исправить. Помогите,...

Ошибка в алгоритме со строками - C++
По условию задачи, вводится строка со словами, необходимо вывести на экран слово, в котором наименьшее число повторяющихся букв. Т.е....

Ошибка в алгоритме Дейкстры - C++
Помогите, пожалуйста исправить ошибки в коде! Не объявлены идентификаторы &quot;all&quot; &quot;information&quot; &quot;output&quot;, в некоторых местах отсутствуют &quot;;&quot;....


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.06.2014, 18:46
Ответ Создать тему
Опции темы

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