所以,我用这个结构来实现另一个结构(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(structplane) * size);
。
问题是缓冲区的大小始终为 8 字节,正如它所说的那样,size
乘以 plane
的大小,实际上是 16。
问题是我应该如何初始化变量,以便获得我想要的缓冲区大小。由于限制,我无法更改函数的返回值或参数。
预先谢谢您!
最佳答案
如果您尝试通过执行 sizeof(q->q)
来获取数组的大小,这将无法按您的预期工作。
由于 struct queue
的 q
字段是一个指针而不是数组,因此 sizeof(q->q)
实际上为您提供了指针的大小,在您的机器上显示为 8 个字节。
该语言不会跟踪在调用 malloc
时分配了多少内存,因此您需要自己跟踪。好的事情是您已经在这样做了。
您使用 malloc(sizeof(structplane) * size)
为大小为 size
的 struct place
数组正确分配了空间,并且您将 size
存储在 q->capacity
中。所以你知道数组有多大。
关于c - 结构体中指针的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50138604/