struct self referencing

时间:2012-08-17 17:56:34

标签: c pointers struct dynamic-memory-allocation

我到处都有语法错误,对ADT和内存处理的语法理解不当。我需要一个在nextprev中引用自身(其他部分)的结构。我做得对吗?我收到错误......

struct _header * header;

typedef struct _header {
    int signiture;
    int size;
    header_t* next;
    header_t* prev;
} header;

我还想用内存初始化内存中的前32个字节(这也不顺利......):

//this is to reference the memory block later
static int *free_list_ptr;

void function(u_int32_t size){
    memory = (byte*) malloc(size);
    header firstHead = malloc(sizeof(_header));
   free_list_ptr = firstHead = memory;
   firstHead->prev = free_list_ptr;
   firstHead->next = free_list_ptr;
}

4 个答案:

答案 0 :(得分:5)

创建时不能引用typedef,所以你应该这样做:

typedef struct a_header {
    int signiture;
    int size;
    struct a_header* next;
    struct a_header* prev;
} header;

header* the_header;

避免带有前导下划线的名称 - 它们是为系统事物保留的。

答案 1 :(得分:0)

请试试这个:

typedef struct _header *lpheader;

typedef struct _header {
    int signiture;
    int size;
    lpheader next;
    lpheader prev;
} header, *lpheader;

为什么这个结构需要32个字节的空间?您应该使用sizeof(_header)

答案 2 :(得分:0)

这是你目前的问题。

memory = (byte*) malloc(size); 
header firstHead = malloc(sizeof(header)); 
    free_list_ptr = firstHead = memory; 

您分配size并将其位置byte*存储到memory

然后您(正确)分配一个header结构,并将该空间的分配存储到firstHead

然后通过将firstHead设置为memory的错误大小的分配空间,然后将free_list_ptr设置为相同的错误大小的分配空间,将其丢弃(泄漏该内存)。 / p>

由于您当前的指针没有足够的内存,因此当您尝试使用nextprev的偏移时会遇到麻烦。

我怀疑你需要这个:

memory = null; 
header firstHead = malloc(sizeof(header)); 
memory = free_list_ptr = firstHead; 

这会将指针memoryfree_list_ptr设置为指向firstHead所指向的已分配空间。

我不知道您为何使用两个不同的指针来跟踪memoryfree_list_ptr。我的直觉是其中一个可能足以满足你的目的。

答案 3 :(得分:0)

您的想法太复杂了,typedef为时已晚,并且您在struct的声明中使用了错误的名称。

typedef struct header header; // <- forward declare "struct header" and identifier "header"

struct header {
    int signiture;
    int size;
    header* next;
    header* prev;
};

续集中,我真的不明白你想做什么。什么是肯定你在那里使用未声明的奇怪名称,并且你投了malloc的回报。