Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Max_hero
0 / 0 / 0
Регистрация: 16.01.2017
Сообщений: 3
1

Mergesort, значение -842150451

16.01.2017, 16:27. Просмотров 390. Ответов 4
Метки нет (Все метки)

проблема заключается в том, что при соединении *m1 и *m2 в *r, если *m1 длины 1, а *m2 длины 2, и m1<m2[0]<m2[1], то значение m2[0] становится -842150451, очень нужна помощь, парюсь уже несколько дней
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
int *sort(int * mas, int x)
{
    int l1 = 0, l2 = 0, *m1, *m2, *r, i = 0, j = 0, z = 0, l;
    if (x == 1)
    {
        return mas + o;
    }
    l1 = x / 2;
    l2 = x - l1;
    m1 = (int*)malloc(sizeof(int)*(l1));
    m1 = sort(mas, l1);
    o++;
    m2 = (int*)malloc(sizeof(int)*(l2));
    m2 = sort(mas, l2);
    r = (int*)malloc(sizeof(int)*(l1 + l2));
    for (i = 0, j = 0, z = 0;(i < l1) && (j < l2);z++)
    {
        if (m1[i] < m2[j])
        {
            r[z] = m1[i];
            i++;
        }
        else
        {
            r[z] = m2[j];
            j++;
        }
    }
    while (i < l1)
    {
        r[z] = m1[i];
        z++;
        i++;
    }
    while (j < l2)
    {
        r[z] = m2[j];
        j++;
    }
        return r;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2017, 16:27
Ответы с готовыми решениями:

Массив выводит -842150451
Здравствуйте, пишу лабораторную и не могу проверить сортировки массива из-за того, что вместо...

Ошибка в коде: Выводится число -842150451
Подскажите, что не правильно сделал? При вводе ошибки в методе Get класса TArray выводит число...

Некорректный вывод симметрической разности двух массивов. Как избавиться от -842150451
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; void func(int*a,...

MergeSort - исправить код
Доброго времени суток! Коротко о проблеме. После ознакомления с кодом в Вики и на различных...

Сортировки Heapsort, Mergesort, Quicksort
Здравствуйте, очень срочно нужна помощь. Помогите сопоставить несколько сортировок в одном файле....

4
likehood
984 / 828 / 396
Регистрация: 25.12.2016
Сообщений: 2,727
Завершенные тесты: 3
16.01.2017, 21:23 2
C
1
2
m1 = (int*)malloc(sizeof(int)*(l1));
m1 = sort(mas, l1);
Выделяешь память и тут же затираешь этот указатель - память в итоге не используется.
Наверное, нужно было скопировать часть массива mas в новый массив m1, и сортировать уже m1.

C
1
o++;
o - это глобальная переменная? Какое-то странное имя, очень похоже на ноль.
0
Max_hero
0 / 0 / 0
Регистрация: 16.01.2017
Сообщений: 3
16.01.2017, 23:34  [ТС] 3
если ты имеешь ввиду затирать - функцию free, то с ней не прокатывает из за того что она пытается очистить память и предшествующих *m1 и *m2, которые в это время используются. Насчёт копирования mas чёт не понял, зачем? o - да, глобальная, дал такое имя чтоб с локальными не спутать.
0
likehood
984 / 828 / 396
Регистрация: 25.12.2016
Сообщений: 2,727
Завершенные тесты: 3
16.01.2017, 23:58 4
Цитата Сообщение от Max_hero Посмотреть сообщение
если ты имеешь ввиду затирать - функцию free
Я имею в виду вторую строку в моём комментарии: m1 = sort(mas, l1).
Цитата Сообщение от Max_hero Посмотреть сообщение
Насчёт копирования mas чёт не понял, зачем?
Похоже тут действительно копирование не нужно. Но тогда зачем создавать новый динамический массив?
0
Max_hero
0 / 0 / 0
Регистрация: 16.01.2017
Сообщений: 3
18.01.2017, 01:02  [ТС] 5
Спасибо за замечание с malloc. Ошибка найдена, просто забыл z++; во втором while.
0
18.01.2017, 01:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2017, 01:02

Ячейки массива имеют значение -842150451
Здравствуйте! Помогите, пожалуйста, разобраться. Почему при случайном вводе массива ячейки массива...

Почему при создании динамического массива через new ячейки массива имеют значение -842150451?
Я хотел бы узнать почему при создании динамического массива через операцию new ячейки массива имеют...

MergeSort
Уважаемые форумчане - прошу простить за надоевшую тему, однако не откажите в помощи помогите найте...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru