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

Ошибка при присвоении значения элементу массива в функции - C++

Восстановить пароль Регистрация
 
Керра
Модератор
 Аватар для Керра
1270 / 438 / 45
Регистрация: 24.08.2011
Сообщений: 2,123
24.12.2012, 13:21     Ошибка при присвоении значения элементу массива в функции #1
Есть такая вот структура:
C++
1
2
3
4
5
6
struct stantsia
{
        string st;
        int hPrib,mPrib,
        hOtb,mOtb;
};
Есть объявление массива:
C++
1
stantsia a[maxn];
И этот массив должен меняться в этой функции:
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
void readAll(int *vsego, stantsia a[maxn])
{
    ifstream f; f.open("C:\timetable.txt");
    string s;
    char ch;
 
    *vsego = 0;
    while (!f.eof())
    {
        vsego++;
        cout << "ok\n"; _getch();
        a[*vsego].st = "";
        cout << "ok\n"; _getch();
 
        do
        {
            f >> ch;
            a[*vsego].st = a[*vsego].st + ch;
        }
        while (ch != ' ');
 
        if (scanf_s("%d:%d %d:%d%[^\n]",&a[*vsego].hPrib,&a[*vsego].mPrib,&a[*vsego].hOtb,&a[*vsego].mOtb) < 4 && !f.eof())
            oshibka();
    }
 
    f.close();
    return;
}
Однако в этой строке
C++
1
a[*vsego].st = "";
почему-то происходит ошибка "Нарушение прав доступа при чтении <адрес>". Почему?
P.S. При компиляции никаких ошибок нет
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vladimir616
110 / 110 / 3
Регистрация: 05.07.2009
Сообщений: 224
24.12.2012, 13:32     Ошибка при присвоении значения элементу массива в функции #2
Керра, на мой взгляд, виновата эта строчка:
C++
1
vsego++;
Исходя из кода, vsego - это не массив, а указатель на переменную типа int, соответственно после инкремента этот указатель будет указывать на область памяти, не принадлежащей вашей программе. Чтобы инкрементировать значение по адресу в указателе, следует заменить эту строчку на это:
C++
1
(*vsego)++;
Керра
Модератор
 Аватар для Керра
1270 / 438 / 45
Регистрация: 24.08.2011
Сообщений: 2,123
24.12.2012, 13:52  [ТС]     Ошибка при присвоении значения элементу массива в функции #3
Vladimir616, с этим уже разобралась, спасибо) теперь другая проблема - с 15 по 20 строчку возникает бесконечный цикл. попробовала выводить ch - как будто не из того файла читает. хотя с файлом все в порядке.
Vladimir616
110 / 110 / 3
Регистрация: 05.07.2009
Сообщений: 224
24.12.2012, 13:58     Ошибка при присвоении значения элементу массива в функции #4
Керра, а если считывать функцией get?
C++
1
f.get(&ch);
prZzZ
Программист
 Аватар для prZzZ
108 / 88 / 5
Регистрация: 22.03.2011
Сообщений: 232
24.12.2012, 13:59     Ошибка при присвоении значения элементу массива в функции #5
Керра, здравствуйте...

Цитата Сообщение от Керра Посмотреть сообщение
f.open("C:\timetable.txt");
нужно так:
C++
1
f.open("C:\\timetable.txt");
В С/C++ \t - это табуляция, а \\ - это \
А вообще, после открытия файла нужно проверять валидно ли он открылся, или нет...
Керра
Модератор
 Аватар для Керра
1270 / 438 / 45
Регистрация: 24.08.2011
Сообщений: 2,123
24.12.2012, 14:08  [ТС]     Ошибка при присвоении значения элементу массива в функции #6
prZzZ, проверила. открылся правильно.
prZzZ
Программист
 Аватар для prZzZ
108 / 88 / 5
Регистрация: 22.03.2011
Сообщений: 232
24.12.2012, 14:16     Ошибка при присвоении значения элементу массива в функции #7
Керра, покажите ваш timetable.txt
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.12.2012, 14:25     Ошибка при присвоении значения элементу массива в функции
Еще ссылки по теме:

C++ возникает ошибка при использовании массива, как параметр функции
C++ Присвоение значения случайному элементу массива
C++ Что быстрее? Обращение к элементу массива или к элементу структуры?

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

Или воспользуйтесь поиском по форуму:
Керра
Модератор
 Аватар для Керра
1270 / 438 / 45
Регистрация: 24.08.2011
Сообщений: 2,123
24.12.2012, 14:25  [ТС]     Ошибка при присвоении значения элементу массива в функции #8
вот...
Вложения
Тип файла: txt timetable.txt (88 байт, 10 просмотров)
Yandex
Объявления
24.12.2012, 14:25     Ошибка при присвоении значения элементу массива в функции
Ответ Создать тему
Опции темы

Текущее время: 15:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru