Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

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

Программа ниже позволяет добавлять структурные объекты в массив и выводить полученный массив. Программа работает отлично до того момента, пока при помощи вызова функции 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 в 21:02.
kotbezusov вне форума Ответить с цитированием
Старый 25.10.2018, 19:24   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

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

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

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

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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