Size of a pointer pointing to a structure
c, pointers, structure
Solution
No, the size of the structure is eight bytes because you have two four-byte fields in it, try printing `sizeof(int)` and `sizeof(char *)` and see for yourself.
When you do `sizeof` of a pointer, you always gets the size of the pointer and never what it points to. There is no way (in standard C) to get the size of memory you have allocated with `malloc`.
Also note that you have undefined behavior in your code, as you change the pointer `p_struct` so it no longer points to what your `malloc` call returned. This leads to the undefined behavior when you try to `free` that memory.
There's also another undefined behavior in the code: The `sizeof` operator returns a value with the type `size_t`. To print a `size_t` value with `printf` one need to use the `%zu` format specifier. Mismatching format specifier and argument type leads to said UB.
Also, the size of pointers and almost all other types are dependent on the compiler and target platform. These days, with 64-bit systems, pointers usually are 64 bits wide, which is 8 bytes. So with padding the structure would be 16 bytes if targeting a 64-bit system.
Problem
I was trying to remember the basics of C programming, and regarding pointers to structures I was doing the following: ``` #include <stdio.h> #include <stdlib.h> #include <assert.h> int main() { struct MyStruct { int number; char *name; }; int i; struct MyStruct *p_struct = (struct MyStruct *) malloc(sizeof(struct MyStruct)*3); printf("sizeof(struct MyStruct) = %d\n", sizeof(struct MyStruct)); for (i = 0; i < 3; i++) { p_struct->number = i; p_struct->name = "string"; printf("p_struct->number = %d, p_struct->name = %s\n", p_struct->number, p_struct->name); ++p_struct; } printf("sizeof(p_struct) = %d\n", sizeof(p_struct)); free(p_struct); return 0; } ``` My question is: I get 8 bytes as the size of the structure, which is okay as 4+4 = 8 bytes due to alignment/padding of the compiler, but why do I get 4 bytes from `sizeof(p_struct)`? I was expecting to get 24 (8 bytes x 3), why is this so? If this is correct, can I get the total allocated size of 24 bytes somehow?