结构内指针的大小

时间:2018-05-02 15:45:05

标签: c multithreading queue pthreads circular-buffer

所以,我有这个结构用于实现另一个结构(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。 问题是我应该如何初始化变量,以便我可以获得我想要的缓冲区。我无法将返回值或函数的参数更改为限制。 先谢谢你了!

1 个答案:

答案 0 :(得分:1)

如果您通过sizeof(q->q)尝试获取数组的大小,那么这不会像您期望的那样工作。

由于q的{​​{1}}字段是指针而不是数组,struct queue实际上为您提供了指针的大小,该指针在您的计算机上显示为8字节大小。

语言不会跟踪sizeof(q->q)通话中分配的内存量,因此您需要自己跟踪。好消息是你已经这样做了。

您使用mallocstruct place大小为size的数组正确分配空间,并将malloc(sizeof(struct plane) * size)存储在size中。所以你知道阵列有多大。