[英]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.