Отсутствие понимания компиляторов (gcc) на Ubuntu и Macos - PullRequest
0 голосов
/ 06 июня 2019

Я сделал программу, которая способна сортировать стек (связанный список), используя другой стек (связанный список) с ограниченными инструкциями, такими как swap, push, rotate и reverse rotate. Я закодировал свою инструкцию push следующим образом: возьмите связанный список, проверьте, есть ли в списке элемент 1, переместите первый элемент списка на другой, измените указатель списка на следующий элемент и удалите элемент push, который был во временной переменной. Использование gcc (Ubuntu 7.3.0-27ubuntu1 ~ 18.04) для компиляции / запуска моей программы с 100 числами работает очень хорошо! Но когда я использую Apple LLVM версии 9.0.0 (clang-900.0.39.2), x86_64-apple-darwin16.7.0, иногда происходит прерывание из-за ошибки malloc: *** для объекта «адрес»: освобожденный указатель не был выделены. Я понимаю тот факт, что у меня есть ошибка в моем коде; но есть ли конкретная причина, по которой Ubuntu не может найти прерывание?

функция push списка b на примере:

push_a берет первый элемент списка b и добавляет его в начало списка a

void        push_a(t_swap *d)
{
   t_list   *new;
   t_list   *tmp;
   int      len;

   len = ft_lstlen(d->b);
   if (len)
   {    
       new = ft_lstnew(d->b->content, d->b->content_size); // malloc of the first element of b that will be added to a
       ft_lstadd(&d->a, new);
       tmp = d->b->next; // changing the head of b stack
       ft_lstdelone(&d->b, ft_free_content); // removing the first element of b
       d->b = tmp;
   }
}

Это часть компиляции: ./sort_stack "1 2 3 5 6 -9 -8 -7 -96 -36 -35 -21 -25 -42 -47 45 47 48 49 22 21 23 -18 -1000 1000 966 -966 36 40 -40 87 -87 0 -700 -730 730 801 802 -989 -911 666 -666 33 961 -962 -961 -898 "

Ошибка на MAC: sort_stack (56020,0x7fffa23cd3c0) malloc: * ошибка для объекта 0xc000000000000000: освобожденный указатель не выделен * установить точку останова в malloc_error_break для отладки [1] 56020 abort ./sort_stack. ОК (список отсортирован) на linux

...