so ändern Sie den Wert, den der Zeiger in eine Struktur, die Punkte in c?

Nach dem Versuch, testen Sie die folgende Funktion, ich habe bestimmt die Zeile auskommentiert gibt ein seg-fault, wenn ich versuche das Programm auszuführen:

uint8_t ll_push_front(struct List *list, int value){
        if (list == NULL)
                return 1;
        struct ListEntry *node = (struct ListEntry *) malloc (sizeof(struct ListEntry));
        if (node == NULL) exit (1);
        if (list->head_ == NULL || list->tail_ == NULL || list->size_ == 0) {
                list->head_ = node;
                list->tail_ = node;
                node->prev_ = NULL;
                node->next_ = NULL;
    //=====>>  *(node_->val_) = value;
                ++(list->size_);
                return 0;
        }
        list->head_->prev_ = node;
        node->next_ = list->head_;
        node->prev_ = NULL;
        *(node->val_) = value;
        list->head_ = node;
        ++(list->size_);
        return 0;
}

was ist falsch mit dem tun *(node_->val_) = value und wie sollte es richtig erklärt?

hier sind die Strukturen:

struct ListEntry {
    struct ListEntry * next_;  //The next item in the linked list
    struct ListEntry * prev_;  //The next item in the linked list
    int * val_;                //The value for this entry
};

/* Lists consist of a chain of list entries linked between head and tail */
struct List {
    struct ListEntry * head_;  //Pointer to the front/head of the list
    struct ListEntry * tail_;  //Pointer to the end/tail of the list
    unsigned size_;            //The size of the list
};

Dies ist, wie ich initilize der Liste:

void ll_init(struct List **list) {
        *list = (struct List *) malloc (sizeof(struct List));
        if (list == NULL) exit (1);
        (*list)->head_ = 0;
        (*list)->tail_ = 0;
        (*list)->size_ = 0;
}
  • Wie ist node_ deklariert und wo wird es gesetzt?
  • Müssen wissen, wie Sie Sie definiert haben, die Strukturen
  • Wenn val_ ist ein int, dann sollten Sie das tun node_->val_ = value;
  • Ihre val_ Mitglied ist ein int Zeiger (int *). Hast du es zuweisen von Speicher? Den code sehe ich nicht. Und in der Tat scheint es zu sein, mit welchem Wert passiert zu sein, dass die Zeiger nach Ihrem Knoten-Ebene malloc(). Dies wird als eine unbestimmte Zeiger und Nutzung von it für eval oder Abtretung ist undefined behavior. Endlich, ich kann nicht erkennen, warum es ist ein Zeiger in den ersten Platz. es scheint eine regelmäßige int sollte ausreichen.
  • Wenn Sie einen Zeiger auf val, dann müssen Sie prüfen diese Zeiger vor einer Zuweisung, denke ich.
InformationsquelleAutor user2481095 | 2013-08-30
Schreibe einen Kommentar