【发布时间】:2018-05-02 15:45:04
【问题描述】:
所以,我有这个结构用来实现另一个结构的循环缓冲区 (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。
问题是我应该如何初始化变量,以便获得所需大小的缓冲区。我不能更改函数的返回值或参数作为限制。
预先感谢您!
【问题讨论】:
-
“他的问题是缓冲区的大小总是8字节”你怎么知道?这对我来说看起来不错。好吧,除了函数从不返回 malloc 的指针而是使用全局变量...
-
请不要在 cmets 中进行澄清,而是 edit 您的问题并将它们放在 那里。
-
当你说你声明事物时,你实际上是在声明事物的指针。我怀疑你看到的是指针的大小,而不是指向的东西的大小。你可以写
sizeof *q来获取q指向的默认对象的大小。 -
正确命名总是一个好主意。例如。
struct plane *q;应该命名为struct plane *planequeue;。这将避免像q->q这样的恐怖。
标签: c multithreading queue pthreads circular-buffer