C 如何键入指针以适应可变结构?
我正在编写一个函数,我想启动一个列表,该列表指向一些数据结构,这些数据结构可以在调用初始函数时更改。并用它调用数据。但我不知道如何使指针变为变量。我曾尝试使用一个空指针,但不知道如何使用结构长度调用它,因此会出现指针指向空空间的错误(我分配了空间)。我已经搜索了一些文章,但没有帮助,我只是在3个月内学会了C 这是我的代码,我贴了一部分。有初始函数和空函数。我不知道如何传递指针大小,以便空函数可以释放数据指针空间。希望你们能帮忙,谢谢C 如何键入指针以适应可变结构?,c,C,我正在编写一个函数,我想启动一个列表,该列表指向一些数据结构,这些数据结构可以在调用初始函数时更改。并用它调用数据。但我不知道如何使指针变为变量。我曾尝试使用一个空指针,但不知道如何使用结构长度调用它,因此会出现指针指向空空间的错误(我分配了空间)。我已经搜索了一些文章,但没有帮助,我只是在3个月内学会了C 这是我的代码,我贴了一部分。有初始函数和空函数。我不知道如何传递指针大小,以便空函数可以释放数据指针空间。希望你们能帮忙,谢谢 typedef struct node{ void *
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;
}
我不知道如何传递指针大小,以便空函数可以释放数据指针空间
free()
不接受大小,只接受指针。因此,无需将内存大小数据
指向空列表
要访问内存
数据
指向您要将指针强制转换到适当类型,然后取消引用它的位置
例如,如果你这样做了
Node * head = init_list(1, sizeof (int));
您可以通过执行以下操作来访问头部数据
*((int*) head->data) = 42;
在
typedef
中隐藏指针不是一个好主意。这同样适用于malloc
和friends的施法结果。是否有错误?您的代码中到底哪里有您无法解决的问题?调用free
不需要分配的内存大小。列表实现看起来有点奇怪,因为您一次分配了一个count+2
列表节点数组,并使用指针算法。通常的方法是一个接一个地分配节点,允许扩展或缩小列表。我在使用free时出错。未分配要释放的指针***在malloc\u error\u break中设置断点以debug@Gerhardh,我刚接触C。你介意告诉我什么是最好的方法吗?你想在循环时仔细检查中的零件。假设您对计数通过了1。代码是否触及无效内存。您好,我知道free()不接受大小。但是我在init_list函数中使用的指针是void,free()不能为空。有一个错误(被释放的指针没有被分配***在malloc_error_break中设置一个断点以进行调试)。我想在函数中调整结构大小,这意味着我需要在函数中使用结构时传递未定义或已定义的。例如,我可能在第一次启动列表时使用结构,在下一次编译时使用结构2。我只想简单地使我的函数可以同时启动和释放它们。但是结构1和结构2的大小不同,因此指针可以覆盖到不同大小的地址。@T.R:“有一个错误(被释放的指针没有分配***在malloc_error_break中设置一个断点以进行调试)。”您可能想在问题中添加引起此错误的代码。这是在空函数@alk中。当我使用free()时。我认为这是因为指针使用void时不是类型转换。我想知道有没有什么好办法可以腾出空间。谢谢。我知道哪里出错了……我在清空下一个节点之前输入它,所以它将进入尾部节点。这就是导致错误的原因