Как найти утечку памяти?

98
26 августа 2021, 16:40
#include <iostream>
#include <ctime>
using namespace std;
void random1(int* nPtr, int n) {
    for (int i(0); i < n; i++) {
        *(nPtr + i) = rand() % 10 + 1;
        cout << *(nPtr + i) << " ";
    }
    cout << endl << endl << endl;
}
void random2(int* mPtr, int m) {
    for (int i(0); i < m; i++) {
        *(mPtr + i) = rand() % 10 + 1;
        cout << *(mPtr + i) << " ";
    }
    cout << endl << endl << endl;
}
void Desiigner(int* mPtr, int* nPtr, int* xPtr, int x, int m, int n) {
    int sck;
    int t = 0;
    int k = 0;
    int* aPtr = new int[m + n];
    for (int i(0); i < m; i++) {
        *(aPtr + i) = *(mPtr + i);
        k = i;
    }
    k++;
    int q = 0;
    for (int i(0); i < n; i++, k++) {
        *(aPtr + k) = *(nPtr + i);
    }
    int kof = 0;
    for (int i(0); i < m + n; i++) {
        for (int j(0); j < m + n; j++) {
            if (i == j) {
                j++;
            }
            if (*(aPtr + i) == *(aPtr + j)) {
                kof++;
            }
        }
        if (kof == 0) {
            *(xPtr + q) = *(aPtr + i);
            for (; t < 1; t++) {
                sck = *(xPtr + q);
            }
            if (q > x) {
                break;
            }
            q++;
        }

        kof = 0;

    }
    for (int i(0); i < m + n; i++) {
        cout << *(aPtr + i) << " ";
    }
    cout << endl << endl;
    for (int i(0); i < x; i++) {
        if (*(xPtr + i) < 0) {
            break;
        }
        cout << *(xPtr + i) << " ";
    }

    cout << endl << endl;
    for (int i(0); i < m + n; i++) {
        if (*xPtr == sck) {
            break;
        }
        xPtr--;
    }

    for (int i(0); i < x; i++) {
        cout << *(xPtr + i) << " ";
    }
    cout << endl << *xPtr << endl << endl;

    delete[] aPtr;
}
int main() {
    //srand(time(0));
    setlocale(LC_ALL, "UKR");
    int m, n, x;

    cout << "Введiть кiлькiсть елементiв першого масиву: ";
    cin >> m;
    cout << endl;
    cout << "Введiть кiлькiсть елементiв другого масиву: ";
    cin >> n;
    cout << endl << endl;
    x = (m > n) ? n : m;
    int* mPtr = new int[m];

    int* nPtr = new int[n];
    int* xPtr = new int[x];
    random1(nPtr, n);
    random2(mPtr, m);
    Desiigner(mPtr, nPtr, xPtr, x, m, n);
    delete[] xPtr, nPtr, mPtr;
    system("pause");
    return 0;
}

Проблема в xPtr, никак не могу найти ошибку, он на нулевом элементе даже.

Answer 1

Отвечаю на исходную задачу.

Даны два массива: А[M] и B[N] (M и N вводятся с клавиатуры). Необходимо создать третий массив минимально возможного размера, в котором нужно собрать общие элементы двух массивов без повторений.

Тег С++. Ну так и пишем.

Для начала чтение массива чисел.

std::vector<int> readArray(std::istream &is) { 
   int s;
   std::cin >> s;
   std::vector<int> res;
   std::copy_n(std::istream_iterator<int>(std::cin),
      s,
      std::back_inserter(res));
   return res;
}

Теперь надо бы слить их.

std::set<int> r;
auto x = readArray(std::cin);
r.insert(x.begin(), x.end());
x = readArray(std::cin);
r.insert(x.begin(), x.end());

А, нам надо массив создать. Ну окей.

std::vector<int> final_res(r.begin(), r.end());
std::copy(final_res.begin(), final_res.end(), std::ostream_iterator<int>(std::cout, " "));

В качестве бонуса даже распечатаю новый массив.

READ ALSO
Как передаются указатели на переменные при записи/чтении *fstream

Как передаются указатели на переменные при записи/чтении *fstream

Как избавиться от локальных переменных, используя элементы класса в read()?

164
C++, полиморфизм и умные указатели

C++, полиморфизм и умные указатели

Я плохо понимаю, как умные указатели (особенно shared_ptr) взаимодействуют с полиморфными типамиОбщая картина кажется простой, но как только я начинаю...

87
Как можно перевернуть число в C++?

Как можно перевернуть число в C++?

Для наглядности: на вход программе даётся число, к примеру 1234Нужно сделать так, чтобы на выходе вывелось число 4321

143
Анимация появления текста

Анимация появления текста

Не понимаю, как добиться такого эффекта появления текста

242