I am confused about when to use a cast with malloc in C. What is the difference between these 2 pieces of code (the code in question is the function that initializes a linked list):
1st Excerpt:
struct QueueNode {
char content;
struct QueueNode* prev;
struct QueueNode* next;
};
struct Queue{
struct QueueNode* first;
struct QueueNode* last;
};
Initialisation of the Queue:
Queue* queueCreate() {
Queue* q = (Queue*) malloc(sizeof(Queue));
q->first = NULL;
q->last = NULL;
return q;
}
2nd excerpt:
typedef struct Element Element;
struct Element
{
int number;
Element *next;
};
typedef struct List List;
struct List
{
Element *first;
};
Initialisation of the Queue:
List *initialisation()
{
List *l = malloc(sizeof(*l));
Element *element = malloc(sizeof(*element));
if (l == NULL || element == NULL)
{
exit(EXIT_FAILURE);
}
element->number = 0;
element->next = NULL;
l->first = element;
return l;
}
This is what I don't understand:
why in the first excerpt do we use a cast (Queue*):
Queue* q = (Queue*) malloc(sizeof(Queue));
while in the 2nd excerpt, there is no cast but we pass a pointer (*l) to sizeof, and there's no cast?
Liste *l = malloc(sizeof(*l))
So I guess the problem is when to use the cast and when to pass a pointer to the sizeof function.
ps. I read some answers here on so like this one Using malloc() and sizeof() to create a struct on the heap
it's about c++ and it says you have to add a cast. In C, does the cast depend on the type of implementation?
Thank you for your help
No comments:
Post a Comment