@Fredik487

Не выводится отсортирований масив, лезет мусор из памяти, как исправить? run-time check failure #2 — stack around the variable 'c' was corrupted?

Задание
Даны два массива, упорядоченных по росту: А [n] и B [m]. Сформируйте массив C[n+m], состоящий из элементов массива А и В, упорядоченный по возрастанию.
Вывод:
619558dc632c6647596526.png
Помогите пожалуста.

#include <iostream>
using namespace std;

int main()
{
	const int ArraySize = 5; // оголосили константу для задання розмірності масиву
	const int ArraySizeC = ArraySize*2;

	int A[ArraySize], * pA, i;
	int B[ArraySize], * pB, j;
	int C[ArraySizeC], * pC, k;
	

	// оголосили: Масив A з ArraySize елементів типу int; покажчик  pA,pB  на int; 
	//змінну i,j типу int
	pA = A; pB = B; pC = C; /* вказівнику pA,pB,pC привласнили адрес нульового елементу масиву*/
	for (i = 0; i < ArraySize; i++)
	{
		cout << "Do enter A[" << i << "] element -->";
		cin >> pA[i]; //p[i] - можно замінити на: *(pA+i), *(A+i) або на звичне нам A[i]
	}
	cout << "\n";
	for (j = 0; j < ArraySize; j++)
	{
		cout << "Do enter B[" << j << "] element -->";
		cin >> pB[j]; //p[j] - можно замінити на: *(pB+j), *(B+j) або на звичне нам B[j]
	}

	for (k = ArraySize,i = 0; k < ArraySizeC && i< ArraySize; k++,i++)
	{
		for (j = 0; j < ArraySize; j++)
		{
			pC[j] = pA[j];
			 
		}
		pC[k] = pB[i];
	}



	//Вивід масив А
	cout << "\n Array A[]:\n";
	for (i = 0; i < ArraySize; i++)
	{
		cout << "A[" << i << "]:"<< pA[i] << "\n";
	}
	//Вивід масив B
	cout << "\n Array B[]:\n";
	for (i = 0; i < ArraySize; i++)
	{
		cout << "B[" << i << "]:" << pB[i] << "\n";
	}

	//Сортировка бульбашкою(пузырьком) масиву С:
	for (i = 0; i < ArraySizeC; ++i)
	{
		for (j = 0; j < ArraySizeC; j++)
		{
			if (pC[j] > pC[j + 1])
			{
				// Обмін місцями
				int temp = pC[j];
				pC[j] = pC[j + 1];
				pC[j + 1] = temp;
			}
		}
	}


	//Вивід масив С
	cout << "\n Array C[]:\n";
	for (i = 0; i < ArraySizeC; i++)
	{
		cout << "C[" << i << "]:" << pC[i] << "\n";
	}

	return 0;
}
  • Вопрос задан
  • 55 просмотров
Решения вопроса 2
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Выход за границу массива там где сортируете. Из этой левой памяти вы и получаете случайное значение.

Смотрите внимательно, к каким индексам вы обращаетесь и какое значение может принимать переменная j.

И еще, можно не сортировать итоговый массив, а формировать его уже отсортированным. Это работает сильно быстрее. Называется - процедура слияния.
Ответ написан
Комментировать
@Fredik487 Автор вопроса
Да проблема была в сортировке.
Я ее исправил.
Вот исправленный вариант, если кому потом нужно будет

#include <iostream>
using namespace std;

int main()
{
  const int ArraySize = 5; // оголосили константу для задання розмірності масиву
  const int ArraySizeC = ArraySize*2;

  int A[ArraySize], * pA, i;
  int B[ArraySize], * pB, j;
  int C[ArraySizeC], * pC, k;
  

  // оголосили: Масив A з ArraySize елементів типу int; покажчик  pA,pB  на int; 
  //змінну i,j типу int
  pA = A; pB = B; pC = C; /* вказівнику pA,pB,pC привласнили адрес нульового елементу масиву*/
  for (i = 0; i < ArraySize; i++)
  {
    cout << "Do enter A[" << i << "] element -->";
    cin >> pA[i]; //p[i] - можно замінити на: *(pA+i), *(A+i) або на звичне нам A[i]
  }
  cout << "\n";
  for (j = 0; j < ArraySize; j++)
  {
    cout << "Do enter B[" << j << "] element -->";
    cin >> pB[j]; //p[j] - можно замінити на: *(pB+j), *(B+j) або на звичне нам B[j]
  }
                
  for (k = ArraySize,i = 0; k < ArraySizeC && i < ArraySize; k++,i++)
  {
    for (j = 0; j < ArraySize; j++)
    {
      pC[j] = pA[j];
       
    }
    pC[k] = pB[i];
  }



  //Вивід масив А
  cout << "\n Array A[]:\n";
  for (i = 0; i < ArraySize; i++)
  {
    cout << "A[" << i << "]:"<< pA[i] << "\n";
  }
  //Вивід масив B
  cout << "\n Array B[]:\n";
  for (i = 0; i < ArraySize; i++)
  {
    cout << "B[" << i << "]:" << pB[i] << "\n";
  }

  //Сортировка бульбашкою(пузырьком) масиву С:
  int t = 0;
  
  for ( i = 0; i < ArraySizeC; i++) {
    for ( j = 0; j < ArraySizeC-1; j++) {
      if (pC[j] > pC[j + 1]) {
        t = pC[j]; // создали дополнительную переменную
        pC[j] = pC[j + 1]; // меняем местами
        pC[j + 1] = t; // значения элементов
      }
    }
  }


  //Вивід масив С
  cout << "\n Array C[]:\n";
  for (i = 0; i < ArraySizeC; i++)
  {
    cout << "C[" << i << "]:" << pC[i] << "\n";
  }
  system("pause");
  return 0;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы