Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 25.10.2018, 19:21   #1
kotbezusov
 
Регистрация: 21.10.2016
Сообщений: 7
Репутация: 10
По умолчанию Необработанное исключение по адресу при работе с динамическим массивом

Программа ниже позволяет добавлять структурные объекты в массив и выводить полученный массив. Программа работает отлично до того момента, пока при помощи вызова функции add (case 2 в программе) не ввести в массив более 3х объектов. В таком случае программа крашиться и выдаёт ошибку: "Необработанное исключение по адресу ... нарушение прав доступа при записи по адресу ..."

Подскажите с чем это связано?

Код:
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <iomanip>
#include <Windows.h>
using namespace std;


struct Kurort
{
    char name[100]; // 
    char place[100]; // 
    int quantity; //
    int cost; // 
};


int show (Kurort *new_kurorts, int n) //ф-ция для отображения массива
{	
	for(int i=0; i<n; i++)
	{	
		cout << new_kurorts[i].name << endl;
		cout << new_kurorts[i].place << endl;
		cout << new_kurorts[i].quantity << endl;
		cout << new_kurorts[i].cost << endl;
	}
}

int add (Kurort *new_kurorts, int &n) //ф-ция для добавления объектов в массив
{
	int val;
	char word[20];

	cin >> word;
	strcpy(new_kurorts[n].name, word);  
	
	cin >> word;
	strcpy(new_kurorts[n].place, word);  

	cin >> val;
	new_kurorts[n].quantity = val;

	cin >> val;
	new_kurorts[n].cost = val;
	
	n++;
}



int main()
{
    Kurort kurorts[] = {"a1", "a2", 15, 200, "b1", "b2", 5, 300, "c1", "c2", 28, 100, };
    
    int n = sizeof(kurorts)/sizeof(kurorts[0]); 

    Kurort *new_kurorts = new Kurort[n]; 
    new_kurorts = kurorts; 

    int ans;
    char ans_c;
    cin >> ans;
	
	
    switch (ans)     
    {
    	case 1:
	        show(new_kurorts, n);
		break;
			
    	case 2:
		do
	        {
			add(new_kurorts, n);
			cin >> ans_c;
		}		
	    	while (ans_c == 'y');
	
	    	break;	
    }
	
    delete [] new_kurorts;
    return 0;

}

Последний раз редактировалось kotbezusov; 25.10.2018 в 22:02.
kotbezusov вне форума   Ответить с цитированием
Старый 25.10.2018, 20:24   #2
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,708
Репутация: 2631
По умолчанию

С тем, что память вы выделили только под 3 элемента.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 25.10.2018, 21:37   #3
kotbezusov
 
Регистрация: 21.10.2016
Сообщений: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
С тем, что память вы выделили только под 3 элемента.
Подскажите, а как выделить динамически память в данном случае?

Последний раз редактировалось kotbezusov; 25.10.2018 в 22:09.
kotbezusov вне форума   Ответить с цитированием
Старый 25.10.2018, 22:03   #4
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,708
Репутация: 2631
По умолчанию

1. Взять std::vector
2. Ручками, когда надо довыделять
3. Сразу выделить на нужное кол-во элементов
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Необработанное исключение по адресу 0x00C34DCF GrandMaster Visual C++ 1 04.04.2016 19:08
Необработанное исключение по адресу 0x012A8F88 в Задачи.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x01020000. Мой повелитель Общие вопросы C/C++ 2 09.01.2016 20:53
Исправить ошибку: необработанное исключение по адресу, нарушение прав доступа при записи по адресу Анастасия_18 Общие вопросы C/C++ 3 16.07.2014 09:57
Ошибка при работе с динамическим IdHTTP Shouldercannon Общие вопросы Delphi 7 21.07.2010 14:08


03:23.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.