gpt4 book ai didi

c - 指针分配后错误的结构成员值

转载 作者:太空宇宙 更新时间:2023-11-04 03:18:45 25 4
gpt4 key购买 nike

<分区>

我正在尝试为结构的成员分配内存并对其进行初始化。

在一个接受结构指针和一些其他参数(在其他成员中使用)的函数中,我为结构本身及其 nodes 成员分配内存并初始化其他成员。在初始化函数中打印 sizelen 成员输出正确的值,但在函数输出随机垃圾后测试它们。

为什么会出现这种行为,我该如何解决?

结构定义:

struct node_t {
int priority;
void *data;
};

struct pqueue {
int len,size,chunk_size;
struct node_t *nodes;
};

初始化函数:

int alloc_pq(struct pqueue *q,int init_size,int chunk_size){
// allocate for struct
if((q=(struct pqueue*) malloc(sizeof(struct pqueue)))==NULL){
perror("malloc");
return -1;
}

// set initial sizes
q->len=0;
q->chunk_size=chunk_size;
q->size=init_size;

if(init_size>0){
// allocate initial node memory (tried malloc here too)
if((q->nodes=(struct node_t*) realloc(q->nodes,init_size*sizeof(struct node_t)))==NULL){
perror("realloc");
return -1;
}
}

printf("%lu %d %d\n",sizeof(*q),q->size,q->len); // DEBUG
return q->size;
}

在主函数中:

struct pqueue q;

...

alloc_pq(&q,n,0);
printf("%lu %d %d\n",sizeof(q),q.size,q.len); // DEBUG

输出(倒数第二个数字总是 > 32000,最后一个数字看似随机):

24 67 0
24 32710 -2085759307

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com