В массиве выводится мусор (Задача на нахождение одинаковых элементов в динамических массивах)

260
27 февраля 2018, 05:51

Дано два динамических массива одинаковой размерности. Нужно вывести массив с одинаковыми элементами этих массивов. В итоге делает размерность исходных массивов, заносит одинаковое число, а на остальные места мусор. Помогите найти ошибку:

#include <iostream>
using namespace std;
    void Mas(int** mas1, int** mas2, int &n)
{
    cin >> n;
    *mas1 = new int[n];
    *mas2 = new int[n];
    for (int i = 0; i < n; i++) {
        (*mas1)[i] = rand() % 10;
    }
    for (int j = 0; j < n; j++) {
        (*mas2)[j] = rand() % 10;
    }
}
    void PrintMas1(int* mas1, int n) {
        for (int i = 0; i < n; i++) {
            cout << mas1[i] << '\t';
        }
        cout << endl;
    }
        void PrintMas2( int* mas2, int n){
        for (int j = 0; j < n; j++) {
            cout << mas2[j] << '\t';
        }
        cout << endl;
    }
        void Same(int** mas1, int** mas2, int&n) {
            int Sam = 0;
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    if ((*mas1)[i] == (*mas2)[j]) {
                        Sam++;
                    }
                }
            }
            int *newMas = new int[Sam];
            int Move = 0;
            for (int i = 0; i < n-Sam; i++) {
                for (int j = 0; j < n-Sam; j++)
                    if ((*mas1)[i] == (*mas2)[j]) {
                        newMas[Move] = (*mas1)[i];
                        Move++;
                    }
            }
            for (int i = 0; i < n; i++) {
                cout << newMas[i] << '\t';
            }
            cout << endl;
            delete[](newMas);
        }

    int main () {
        int n = 0;
        int *mas1 = NULL;
        int *mas2 = NULL;
        Mas(&mas1, &mas2, n);
        PrintMas1(mas1, n);
        PrintMas2(mas2, n);
        Same(&mas1, &mas2, n);
        delete[] mas1;
        delete[] mas2;
        system("pause");
        return 0;
    }
Answer 1

Ты сначала считаешь кол-во одинаковых элементов, для создание массива, но затем ты зачем-то приходишься только по n-Sam элементам твоих массивов. То есть если у тебя два массива {5 7 8 9 1} и {6 2 1 7 5}, то ты создаешь третий массив размером в 3, а затем приходишься по первым трем элементам первых двух массивов то есть {5 7 8} и {6 2 1}, как видно здесь нет одинаковых элементов, а так как ты не обнулил третий массив том остался мусор.

READ ALSO
Неправильно работающая программа. Win32, Direct2D

Неправильно работающая программа. Win32, Direct2D

Картинка почему то постоянно обновляется, и происходит постоянное выделение памяти без освобождения

225
Как ArrayList &lt;Integer&gt; заполнить с клавиатуры?

Как ArrayList <Integer> заполнить с клавиатуры?

Как ArrayList <Integer> заполнить с клавиатуры?

253
вопрос с массивами

вопрос с массивами

решаю задачу и результаты теста показывают что я где-то намудрил с массивами (насколько я понимаю), но я не вижу где мог бы допустить ошибкуЗнатоки,...

264
Java возвращение значения из функции

Java возвращение значения из функции

Не могу додуматься как вернуть значение

314