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

Динамический массив структур - ошибка "попытка чтения или записи в защищенную память" - C++

Восстановить пароль Регистрация
 
knazty
0 / 0 / 0
Регистрация: 23.11.2011
Сообщений: 5
17.02.2014, 03:31     Динамический массив структур - ошибка "попытка чтения или записи в защищенную память" #1
не работает:
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
class Students {
    struct list
    {
        string marka_mashini;
        string familiya_vladelca;
        int god_vipuska; 
        string registracionniy_nomer;
        string data_tehosmotra;
    };
 
private:
    list* spisok_mashin = 0;
    int kol = 0;
public:
    void dobavlenie_zapisi(string marka_mashini, string familiya_vladelca, int god_vipuska, string registracionniy_nomer, string data_tehosmotra)
    {
        kol++;
        spisok_mashin = (list*)realloc(spisok_mashin, kol * sizeof(list));
        spisok_mashin[kol - 1].marka_mashini= marka_mashini;
        spisok_mashin[kol - 1].familiya_vladelca= familiya_vladelca;
        spisok_mashin[kol - 1].god_vipuska = god_vipuska;
        spisok_mashin[kol - 1].registracionniy_nomer= registracionniy_nomer;
        spisok_mashin[kol - 1].data_tehosmotra= data_tehosmotra;
    }
а вот так, работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Students {
    struct list
    {
        char marka_mashini[14];
        char familiya_vladelca[19];
        int god_vipuska; 
        char registracionniy_nomer[12];
        char data_tehosmotra[10];
    };
private:
    list* spisok_mashin = 0;
    int kol = 0;
public:
    void dobavlenie_zapisi(char marka_mashini[], char familiya_vladelca[], int god_vipuska, char registracionniy_nomer[], char data_tehosmotra[])
    {
        kol++;
        spisok_mashin = (list*)realloc(spisok_mashin, kol * sizeof(list));
        strcpy(spisok_mashin[kol - 1].marka_mashini, marka_mashini);
        strcpy(spisok_mashin[kol - 1].familiya_vladelca, familiya_vladelca);
        spisok_mashin[kol - 1].god_vipuska = god_vipuska;
        strcpy(spisok_mashin[kol - 1].registracionniy_nomer, registracionniy_nomer);
        strcpy(spisok_mashin[kol - 1].data_tehosmotra, data_tehosmotra);
    }
При выполнении выдаёт ошибку на строчке:
C++
1
spisok_mashin[kol - 1].marka_mashini= marka_mashini;
Миниатюры
Динамический массив структур - ошибка "попытка чтения или записи в защищенную память"  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2014, 03:31     Динамический массив структур - ошибка "попытка чтения или записи в защищенную память"
Посмотрите здесь:

C++ Попытка чтения или записи в защищенную память
C++ Попытка чтения или записи в защищенную память
Ошибка : Попытка чтения или записи в защищенную память C++
C++ Попытка чтения или записи в защищенную память
C++ Попытка чтения или записи в защищенную память
C++ Ошибка "Попытка чтения в запрещенную память" при работе с файлами
Двумерный динамический массив. Попытка чтения или записи в защищенную память C++
Ошибка "error C2109: для индекса требуется массив или указатель" C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AntonChik
1083 / 581 / 21
Регистрация: 11.11.2008
Сообщений: 1,544
17.02.2014, 07:30     Динамический массив структур - ошибка "попытка чтения или записи в защищенную память" #2
контейнер string в отличие от char[] является так сказать "резиновым" и sizeof() не выдаст как ожидается размер строки, т.к. заранее не известны ни длина, ни максимальная длина (в отличие от char[])
а потому не будет выделен новый объем памяти и выскочит ошибка доступа к невыделенной памяти, что и происходит.

длину каждого конкретного экземпляра string можно узнать с помощью length() и можно от этого плясать, но будет много возни.

я бы остановился на втором варианте, он вполне отвечает понятию "Динамический массив структур".
если конечно нет нужды обязательно использовать string
Yandex
Объявления
17.02.2014, 07:30     Динамический массив структур - ошибка "попытка чтения или записи в защищенную память"
Ответ Создать тему
Опции темы

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