rEAcT1oNmanT1s
@rEAcT1oNmanT1s

Как решить ошибку такого рода на С++?

Доброго времени суток, хабровчани и не только :)

Писал простую програмку сортировки пузырьком. Очень простую.

Заместо обычных рассортированных чисел показывает минусовое число, типо: -842150451(во всех ячейках массива)

5ff1ab80225b47a0a1c04823522961ba.png
#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
	setlocale(LC_ALL, "Russian");
	cout << "\t\t***Сортировка пузырьком***\n\n";

	int m;

	cout << "Введите кол-во массивов: ";
	cin >> m;

	int *D = new int [m];

	cout << "Заполните весь массив:\n";

	for (int i = 0; i < m; i++)
	{
		cout << "D[" << i << "] = ";
		while (!(cin >> D[m]))
		{
			cin.clear();
			while (cin.get() != '\n');
			cout << "D[" << i << "] = ";
		}
	}

	for (int i = 0; i < m; i++)
	{
			for (int j = m - 1; j > i; j--)
			{
				if (D[j] < D[j - 1])
				{
					swap(D[j], D[j - 1]);
				}
			}
	}
	
	for (int i = 0; i < m; i++)
	{
			cout << "D[" << i << "] = " << D[i] << endl;
	}
	cout << "Массив рассортирован!!!\n";

	_getch();
	return 0;
}


Буду благодарен за подсказку!!!
  • Вопрос задан
  • 3362 просмотра
Решения вопроса 1
@drozdVadym
Строчку
while (!(cin >> D[m]))
замените на
while (!(cin >> D[i]))

И да, как отметили выше, лучше не
cout << "Введите кол-во массивов: ";
а
cout << "Введите кол-во элементов массива ";

P.S. И обычно такие значения при выводе или в дебаге могут означат что Вы читаете не инициализированную область памяти.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Самый лучший способ найти ошибку - запустить пошаговый режим отладки и смотреть, как изменяются значения переменных на каждом шаге. Скорее всего, массив изначально заполняется неправильно.
P.S. И ещё, "количество массивов" в вашей программе - всегда 1. Меняется только размер (количество элементов) массива.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы