Помогите исправить ошибку, пожалуйста

Всем привет. Есть программа, которая должна удалять двузначные числа в массиве. Элементы удаляются, но когда я пытаюсь вывести их(по сути это же пустые элементы), они выводятся как космическое число. А так же при попытке вывода оставшихся почему то не все выводится. В общем помогите пожалуйста.

#include "stdafx.h"
#include <ctime>
#include <iomanip>
#include <iostream>
#include <algorithm>

   using namespace std;

  int* delete_el(int *array, int &size, int index)
  {
size--;
int *temp;
temp = (int *) malloc((size)*sizeof(int));
int ind = 0;
for (int i =0; i < size; i++)
{
    if (i != index)
    {
        *(temp+ind) = array[i];
        ind++;
    }
}
return temp;}

int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "russian");
srand(time(0));
cout << "В целочисленном массиве X(N) удалить все двузначные числа. Удаляемые элементы записывать в новый массив. Вывести сообщение, сколько элементов было удалено." << endl;
int n;
cout << "Введите размер массива" << endl;
cin >> n;
int *X, *Y, count;
count = 0;
X = new int [n];
Y = new int [n];
cout << "Массив X(N): ";
for (int i = 0; i < n; i++)
{
    X[i] = rand() % 20;
    cout << X[i] << " ";
    if ((X[i] >= 10) && (X[i] < 100))
    {
        Y[count] = X[i];
        X = delete_el(X, n, i);
        count++;
    }
}
cout << endl;
cout << "Массив удаленных чисел:" << " ";
for (int i = 0; i < count; i ++ )
{
    cout << Y[i] << " ";
}
cout << endl;
cout << "Массив оставшихся чисел:" << " ";
for(int i = 0; i < n-count; i ++)
{
    cout << X[i] << " ";
}
cout << endl << "Количество удаленных чисел: " << count << endl;
system("pause");
return 0;}

Ответы (1 шт):

Автор решения: Павел Ериков

Если я вас правильно понял. То вы хотите удалять из массива X элемент посредством создания нового temp и копирования туда всех элементов кроме с индексом index.

Функция delete_el:

int* delete_el(int* array, int size, int index)
{
    //Выделяем память под новым массив без учета одного элемента
    int* temp;
    temp = (int*)malloc((size - 1) * sizeof(int));
    int ind = 0;
    //Копируем все элементы array в новый массива без элемента
    //с индексом index
    for (int i = 0; i < size; i++)
    {
        if (i != index) {
            *(temp + ind) = array[i];
            ind++;
        }
    }
    //Удалим старый массив
    delete[] array;
    //Вернем новый массив
    return temp;
}

В функции main приведу только основной цикл:

for (int i = 0; i < n; i++)
{
    //Если мы генерируем число из двух цифр, то
    //мы пропускаем X[i - 1] и сразу бы записывали
    //в X[i] новое число, НО отсюда и появляются случайное число из памяти
    //По этому надо писать i - count чтобы не было пропусков
    //И везде теперь используем i - count
    X[i - count] = rand() % 200;
    cout << X[i - count] << " ";
    if ((X[i - count] >= 10) && (X[i - count] < 100))
    {
        Y[count] = X[i - count];
        //Не выделяем память каждый раз по все n элементов
        X = delete_el(X, n - count, i - count);
        count++;
    }
}

Код не оптимизированный, как минимум потому что выделять каждый раз память, под новый массив это нецелесообразно.

→ Ссылка