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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2014, 00:29   #1
Епифан Суровый
 
Регистрация: 16.03.2014
Сообщений: 5
По умолчанию С++ Помогите найти ошибку

Код:
int *massiv = new int[100];
	int variant, l, n, r, f;
	cout << "choice of action\n" << endl;
	r = 0;
	while (r != 6)
	{
		cout << "0. Input array\n"
			<< "1. Show array\n"
			<< "2. Find number of last min element\n"
			<< "3. Adding a negative number after every number x\n"
			<< "4. Exit\n" << endl;
		cin >> variant;
		if (variant == 0)
		{
			delete[] massiv;
			int *massiv = new int[100];
			cout << "Enter number of properties" << endl;
			cin >> n;
			cout << "Enter array" << endl;
			l = 0;
			while (l < n)
			{
				cin >> massiv[l];
				l = l + 1;
			}
		}
		if (variant == 1)
		{
			l = 0;
			while (l < n)
			{
				cout << massiv[l] << endl;
				l = l + 1;
			}
		}
		if (variant == 4)
		{
			r = 6;
		}
		if (variant == 2)
		{
		}
		if (variant == 3)
		{

		}
	}
Программа выводит меню, выбираю пункт "0", ввожу массив, потом выбираю пункт "1", который должен вывести массив, и выдает ошибку.
Не могу понять в чем дело, помогите пожалуйста.
Епифан Суровый вне форума Ответить с цитированием
Старый 08.05.2014, 07:11   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,833
По умолчанию

Код:
if (variant == 0)
		{
			delete[] massiv;
Кто здесь массив? Его еще нет.

Цитата:
int *massiv = new int[100];
Переменная массив уничтожилась после закрывающей скобки ифа, а память утекла...

Как оно у вас скомпилировалось?
p51x вне форума Ответить с цитированием
Старый 08.05.2014, 07:24   #3
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Давайте попробуем порассуждать.
1. Вы объявляете массив и выделяете под него память.
2. Когда вы его заполняете, сначала освобождаете память (т.е. удаляете уже созданный массив) и создаете в пределах видимости (в фигурных скобках новый массив), который уничтожается при выходе за пределы блока.
3. Вы нажимаете 1 и пытаетесь выводить массив... а выводить то и нечего.. в обоих случаях массивы уничтожены.

Выделяйте нормально память под массив, заполняйте его и выводите.

p51x прямо с языка сорвал...
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!

Последний раз редактировалось Bugrimov; 08.05.2014 в 07:27.
Bugrimov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти ошибку на СИ) Nazar0135 Помощь студентам 0 01.03.2014 13:45
Помогите найти ошибку - StrToFloat выдаёт ошибку EConvertError для ячеек StringGrid (Delphi) Artsiom Помощь студентам 10 18.12.2013 14:10
Помогите найти ошибку NeiL Общие вопросы Delphi 7 04.03.2008 07:14
help!!! Помогите найти ошибку!!! linker13 Общие вопросы Delphi 2 07.07.2007 23:15