Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 05.05.2015
Сообщений: 3

Память для динамического массива структур

06.09.2015, 23:58. Показов 650. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть функция Insert, в которой я даю параметрами старый массив объектов структуры, его размер и новый объект, которым надо дополнить массивчик. Проблема "Необработанное исключение по адресу 0x54799835 (msvcr120d.dll) в sodochka.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCCCCCCD0." возникает на второй итерации первого цикла. Где-то прочитал,что это может быть отсутствие выделенной для дополнительного массива памяти. Может кто объяснит,в чем баг?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void Insert(Kaf **mas, int N, Kaf &obj){
    Kaf *mas1 = new Kaf[N + 1];//доп.массив на ячейку больше старого
    for (int i = 0; i < N; i++){
        //mas1[i] = *mas[i];//запись в него старого массива
        strncpy_s(mas1[i].nazvKaf, (*mas[i]).nazvKaf, 45);//здесь уже ошибка на второй итерации
        mas1[i].nomKaf = (*mas[i]).nomKaf;
        strncpy_s(mas1[i].prizZavKaf, (*mas[i]).prizZavKaf, 10);
        mas1[i].shtatStav = (*mas[i]).shtatStav;
        mas1[i].vypKaf = (*mas[i]).vypKaf;
    }
    mas1[N] = obj;//и в конец-новый элемент
    delete[] mas;
    *mas = new Kaf[N + 1];//переопределяем старый массив
 
    for (int i = 0; i < N + 1; i++){
        *mas[i] = mas1[i];
    }
    N++;
    delete[] mas1;
}
Если нужно,то вот структура:
C++
1
2
3
4
5
6
7
struct Kaf{
    unsigned int nomKaf;
    char nazvKaf[100];
    double shtatStav;
    bool vypKaf;
    char prizZavKaf[30];
};
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.09.2015, 23:58
Ответы с готовыми решениями:

Память для динамического массива в классе
Вариант 9. Создать класс MASS1, заданный последовательностью чисел. Реализовать следующие вычисления в виде методов класса: ...

Как выделить память для динамического массива?
Как выделить память для динамического массива? typedef TPrimitives *TPrimitive; //... TPrimitives Primitives; Мне нужно выделить...

Как в отдельной функции выделить память для динамического массива, объявленного в main
Доброго времени суток. Передо мной стоит задача выделения памяти для динамического массива в отдельной функции. То есть я объявляю в...

4
 Аватар для SherHun
31 / 31 / 22
Регистрация: 22.06.2015
Сообщений: 102
07.09.2015, 00:35
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void Insert(Kaf **mas, int N, Kaf &obj){
    Kaf *mas1 = new Kaf[N + 1];//доп.массив на ячейку больше старого
    for (int i = 0; i < N; i++)
    {
        mas1[i] = (*mas)[i];
    }
    mas1[N] = obj;//и в конец-новый элемент
 
    delete[] *mas;
 
    *mas = new Kaf[N + 1];//переопределяем старый массив
    for (int i = 0; i < N + 1; i++)
    {
        (*mas)[i] = mas1[i];
    }
 
    N++;
    delete[] mas1;
}
1
1 / 1 / 1
Регистрация: 30.07.2015
Сообщений: 8
07.09.2015, 11:24
Первое предположение, что strncpy_s пытается все в юникоде копировать - предположение основано только на том, что в win-библиотеке есть такая же функция, но с 4-мя параметрами ( https://msdn.microsoft.com/ru-... 10%29.aspx ).
Второе предположение - в том, что при второй итерации nazvKaf - указывает на null, это более похоже на правду, так как программа вылетает именно с нарушением прав доступа. (как говорит https://msdn.microsoft.com/ru-... he8ah.aspx msvcr120d.dll - это "Библиотека среды выполнения языка С (CRT) для машинного кода." )
То есть неправильная работа с памятью в любом случае...
+ Лучше всего посмотреть в отладчике что происходит с полями nazvKaf и prizZavKaf при работе.
0
 Аватар для SherHun
31 / 31 / 22
Регистрация: 22.06.2015
Сообщений: 102
07.09.2015, 11:48
sutop,
Было
Цитата Сообщение от romariomkk Посмотреть сообщение
mas1[i] = *mas[i];
стало
Цитата Сообщение от SherHun Посмотреть сообщение
mas1[i] = (*mas)[i];
Для верной работы нужны были скобки.
Ну и разменять
Цитата Сообщение от SherHun Посмотреть сообщение
delete[] *mas;
1
0 / 0 / 0
Регистрация: 05.05.2015
Сообщений: 3
09.09.2015, 00:37  [ТС]
Спасибо, SherHun, долго парился по этому поводу, хотя все так просто..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.09.2015, 00:37
Помогаю со студенческими работами здесь

Сортировка динамического массива структур
Доброго всем здравия, духовного и телесного. Сортирую массив структур, но понимаю, что делается это самым примитивным способом. ...

Очищение динамического массива структур
Здравствуйте, Господа. Есть структура, например такая: typedef struct cont1 { long int n; char name; char hoho; }CONTACT; И...

Удаление динамического массива структур
Если удалять массив структур как обычно пишут, то при запросе следующей структуры из массива на вывод она отображается. То есть происходит...

Доступ к элементам динамического массива из структур
Всем доброго времени суток! Проблема вот какая. Есть вот такой вот код. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; ...

Освобождение памяти динамического массива структур
Поставлена следующая задача: сделать любую структуру, сгененировать в неё рандомные данные, записать в бинарник. Потом считать из...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru