C 如何键入指针以适应可变结构?

C 如何键入指针以适应可变结构?,c,C,我正在编写一个函数,我想启动一个列表,该列表指向一些数据结构,这些数据结构可以在调用初始函数时更改。并用它调用数据。但我不知道如何使指针变为变量。我曾尝试使用一个空指针,但不知道如何使用结构长度调用它,因此会出现指针指向空空间的错误(我分配了空间)。我已经搜索了一些文章,但没有帮助,我只是在3个月内学会了C 这是我的代码,我贴了一部分。有初始函数和空函数。我不知道如何传递指针大小,以便空函数可以释放数据指针空间。希望你们能帮忙,谢谢 typedef struct node{ 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;
}
我不知道如何传递指针大小,以便空函数可以释放数据指针空间

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时不是类型转换。我想知道有没有什么好办法可以腾出空间。谢谢。我知道哪里出错了……我在清空下一个节点之前输入它,所以它将进入尾部节点。这就是导致错误的原因