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 einint
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-Ebenemalloc()
. 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äßigeint
sollte ausreichen. - Wenn Sie einen Zeiger auf val, dann müssen Sie prüfen diese Zeiger vor einer Zuweisung, denke ich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Sie sich entschieden haben, verwenden Sie einen Zeiger auf eine ganze Zahl, die Sie brauchen, um
malloc
auch.d.h.
Dann
Dadurch wird
Arbeit
Nutzen Sie alternativ
Dann
Arbeiten
Können Sie
memcpy(node_->val_, &value)
, aber was ist Ihr Zweck, warum nicht erklärennode_->val_
zuint