Hello i’m not sure if I’m understand the following piece of code. I would glad if someone could read my explanations and correct me if I’m wrong.
So first of all I’m declaring a struct with three arrays of char and an integer.
struct Employee
{
char last[16];
char first[11];
char title[16];
int salary;
};
After that I declare a function which takes three pointers to char and an integer value. This function uses malloc() and sizeof() to create a struct on the heap. Now this creations of the object on the heap is not really clear to me. When I use struct Employee* p = malloc(sizeof(struct Employee)), what happens there exactly?
What happens when I use the function struct Employee* createEmployee (char* last, char* first, char* title, int salary) several times with different input. I know that I will get back a pointer p but isn’t that the same pointer to the same struct on the heap. So do I rewrite the information on the heap, when I use the function several times? Or does it always create a new object in a different memory space?
struct Employee* createEmployee(char*, char*, char*, int);
struct Employee* createEmployee(char* last, char* first, char* title, int salary)
{
struct Employee* p = malloc(sizeof(struct Employee));
if (p != NULL)
{
strcpy(p->last, last);
strcpy(p->first, first);
strcpy(p->title, title);
p->salary = salary;
}
return p;
}
I would be glad if someone could explain it to me. Thank you very much.
The
mallocfunction allocates some new bytes on the heap and returns the pointer.So the
createEmployeefunction allocates new memory every time it’s called, then fills it with some data (in an unsafe way – consider usingstrncpyinstead) and returns the pointer to that memory. It will return a different pointer every time it’s called.Each instance you create with this function will exist as long as you don’t call
freeon its pointer.