我正在编写一个函数,我想初始化一个列表,该列表指向一些在调用初始函数期间可以更改的数据结构。然后调用数据。但是我不知道如何使指针变量。我尝试使用void指针,但是不知道如何使用结构长度来调用它,因此会出现一个错误,该指针指向空空间(我分配了空间)。我被搜索过一些文章,但没有帮助,我只用了3个月就学习了C。
这是我的代码,我张贴了部分代码。有一个初始函数和一个空函数。我不知道如何传递指针大小,以便空函数可以释放数据指针空间。希望你们能提供帮助,非常感谢。
typedef struct node{
void *data;
struct node *next,*prev,*head,*tail;
}Node;
typedef Node *List;
void empty_list(List plist){
Node *tmp,*phead;
phead=direct_to_head(plist);
while (phead->next!=NULL) {
tmp=phead->next;
if(tmp->data!=NULL){
free(tmp->data);
tmp->data=NULL;
}
free(phead);
phead=tmp;
}
free(phead);
phead=NULL;
plist=NULL;
}
List init_list(unsigned int count,size_t size){
if(count==0)
fprintf(stderr,"node number can't be zero");
Node *head,*tail;
head=(Node *)calloc(count+2, sizeof(Node));
if(head==NULL){
fprintf(stderr, "No space in initing.");
return NULL;
}
tail=head+count+1;
head->tail=head+count+1;
head->next=head+1;
tail->head=head;
tail->prev=tail-1;
while (count>0) {
head++;
head->data=(void *)calloc(1, size);
if(head->data==NULL){
fprintf(stderr, "No space in initing.");
return NULL;
}
head->head=head-count;
head->tail=tail;
head->next=head+1;
head->prev=head-1;
count--;
}
return (head->head)+1;
}
答案 0 :(得分:1)
我不知道如何传递指针大小,因此空函数可以释放数据指针空间。
free()
不占用大小,而只占用指针。因此,无需将内存data
的点传递到empty_list
。
要访问内存,data
指向您要将指针转换为适当的类型,然后将其取消引用。
例如,如果您这样做
Node * head = init_list(1, sizeof (int));
您可以通过执行操作来访问头部的数据
*((int*) head->data) = 42;