简体   繁体   English

如何更改结构中的指针指向c中的值?

[英]how to change the value a pointer within a struct points to in c?

After trying to test the following function, i have determined the line commented out gives a seg fault when i try to run the program: 尝试测试以下功能后,我确定注释掉的行在尝试运行该程序时出现段错误:

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;
}

what is wrong with doing *(node_->val_) = value and how should it be properly declared? *(node_->val_) = value什么问题,应该如何正确声明?

here are the structs: 这是结构:

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
};

This is how i initilize the list: 这就是我初始化列表的方式:

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;
}

As you have decided to use an pointer to an integer you need to malloc that as well. 当您决定使用指向整数的指针时,还需要对其进行malloc分配。

ie

struct ListEntry *node =  malloc (sizeof(struct ListEntry));

Then 然后

node->val_  = malloc(sizeof(int));

This will make 这将使

*(node->val_) = value 

Work 工作

Alternatively use 替代使用

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 (no pointer)
};

Then 然后

node->val_ = value

Will work 将工作

您可以使用memcpy(node_->val_, &value) ,但是目的是什么,为什么不将node_->val_声明为int

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM