Указатели в C - поиск проблем с ошибками сегментации - PullRequest
0 голосов
/ 23 марта 2020

У меня возникли небольшие проблемы с тем, чтобы обернуть голову вокруг использования и установки указателей в связанных списках .... У меня продолжают появляться ошибки сегментации в моем коде, кто-нибудь видит какие-либо очевидные проблемы здесь?

В последнее время я получаю ошибки в каждом фрагменте кода, который я пишу, и это очень расстраивает, потому что я почти не могу их отследить. Я студент-физик, пытаюсь научить себя программировать, поэтому я очень начинающий программист, и я прошу прощения, что задаю такой общий вопрос, любой совет очень ценится!

(Чтобы объяснить код, мы должны создать связанный список с узлами, которые содержат три случайные переменные, а затем отсортировать список тремя различными способами, rand_double просто генерирует случайный double и работает отлично, так что я знаю, проблема не в этом !!)

Node* randomList(int length){

int i;
Node **head, *new;

head = malloc(sizeof(Node**));
*head = NULL;

new = malloc(sizeof(Node*));
new = NULL;


/*create list by adding new node to beginning of list, using 'push' method*/
for(i=0;i<length; i++){

    /*set data in new node*/
    new->value = (int)rand_double(0,10);
    new->key1 = rand_double(10.0, 50.0);
    new->key2 = rand_double(50.0, 90.0);

    new->sort1 = malloc(sizeof(Node*));
    new->sort2 = malloc(sizeof(Node*));
    new->next = malloc(sizeof(Node*));

    new->sort1 = NULL;
    new->sort2 = NULL;

    /*
        set pointers
        new node points to what head points to, head points to new
    */  
    new->next = *head;
    *head = new;
}


return *head;

}

1 Ответ

0 голосов
/ 23 марта 2020

У вас есть несколько проблем в вашем коде:

-Вы mallo c -ing sizeof (Node **) или (Node *) - это не то, что вы хотите, вам нужно выделить место для sizeof (Node).

- Вам не нужно выделять место для заголовка, он просто будет указывать на первый узел

- У вас есть несколько утечек памяти, когда вы называете mallo c и затем переназначить переменную

- Вы только один раз выделяете место для нового. Возможно, вы захотите переместить строку new = mallo c внутрь для значений l oop

-sort1 и sort2, которым присвоены значения, но они никогда не используются

Пожалуйста, устраните эти проблемы и обновите вопрос, если вы все еще застряли. Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...