malloc(sizeof(ptr)) 和 malloc(sizeof(ptr*)) 的区别?

Difference between malloc(sizeof(ptr)) and malloc(sizeof(ptr*))?

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

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

这里是队列的定义:

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

提前致谢!

不同的是第二行错了;它分配了足够的 space 来将 指针 存储到 queue,而不是 queue 本身,但它被分配给一个假设它指向的类型space 足够 queue.

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

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

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

queue *f = malloc(sizeof *f);