LEA*_*NER 1 c pointers dynamic-memory-allocation
我想知道这两行有什么区别:
queue* f=(queue*)malloc(sizeof(queue));
Run Code Online (Sandbox Code Playgroud)
queue* f=(queue*)malloc(sizeof(queue*));
Run Code Online (Sandbox Code Playgroud)
队列的定义如下:
typedef struct queue
{
int arr[N];
int tail;
}queue;
Run Code Online (Sandbox Code Playgroud)
提前致谢!
不同的是第二行是错误的;它分配足够的空间来存储一个指针的queue,不是queue本身,而是它分配给假定它指向足够的空间了整整一个类型queue。
两者都不需要 cast,所以正确的形式是:
queue *f = malloc(sizeof(queue));
Run Code Online (Sandbox Code Playgroud)
为了更安全,不要引用类型本身,而是引用您要分配给的变量,以避免重复类型(如果类型更改可能会导致维护问题);这也意味着sizeof不需要括号:
queue *f = malloc(sizeof *f);
Run Code Online (Sandbox Code Playgroud)