所以,我有这个结构用于实现另一个结构(plane
)
typedef struct queue
{
struct plane *q;
int size, capacity, front, rear;
}queue;
在此之后我宣布结构
queue *q;
以后,为了使缓冲区,我使用这个方法
int queue_init(int size){
q = (queue*) malloc(sizeof(queue));
q->q=malloc(sizeof(struct plane) * size);
q->size = 0;
q->capacity = size;
q->front = 0;
q->rear = 0;
return 0;
}
应该是使用q->q=malloc(sizeof(struct plane) * size);
来使用缓冲区和缓冲区本身所需的所有变量。
问题是缓冲区的大小总是8个字节,它应该像它所说的那样size
乘以plane
的大小,实际上是16。
问题是我应该如何初始化变量,以便我可以获得我想要的缓冲区。我无法将返回值或函数的参数更改为限制。
先谢谢你了!
答案 0 :(得分:1)
如果您通过sizeof(q->q)
尝试获取数组的大小,那么这不会像您期望的那样工作。
由于q
的{{1}}字段是指针而不是数组,struct queue
实际上为您提供了指针的大小,该指针在您的计算机上显示为8字节大小。
语言不会跟踪sizeof(q->q)
通话中分配的内存量,因此您需要自己跟踪。好消息是你已经这样做了。
您使用malloc
为struct place
大小为size
的数组正确分配空间,并将malloc(sizeof(struct plane) * size)
存储在size
中。所以你知道阵列有多大。