malloc(sizeof(ptr))与malloc(sizeof(ptr *))之间的区别?

问题描述 投票:0回答:1

我想知道这两行之间有什么区别:

 queue* f=(queue*)malloc(sizeof(queue));
 queue* f=(queue*)malloc(sizeof(queue*));

这里是队列的定义:

typedef struct queue
{
    int arr[N];
    int tail;
}queue;

提前感谢!

c pointers dynamic-memory-allocation
1个回答
4
投票

区别在于第二行是错误的;它分配足够的空间来存储pointerqueue本身,而不是queue本身,但是它被分配给一种类型,该类型假定它指向整个queue的足够空间。

Neither one requires a cast,所以正确的形式是:

queue *f = malloc(sizeof(queue));

为了更加安全,请不要引用类型本身,请引用要分配给它的变量,以避免重复该类型(如果更改类型,则可能导致维护问题);这也意味着sizeof doesn't need parentheses

sizeof
© www.soinside.com 2019 - 2024. All rights reserved.