Allocating works the same for all types. If you need to allocate an array of line
structs, you do that with:
struct line* array = malloc(number_of_elements * sizeof(struct line));
In your code, you were allocating an array that had the appropriate size for line
pointers, not for line
structs. Also note that there is no reason to cast the return value of malloc()
.
Note that’s it’s better style to use:
sizeof(*array)
instead of:
sizeof(struct line)
The reason for this is that the allocation will still work as intended in case you change the type of array
. In this case this is unlikely, but it’s just a general thing worth getting used to.
Also note that it’s possible to avoid having to repeat the word struct
over and over again, by typedef
ing the struct:
typedef struct line { char* addr; char* inst; } line;
You can then just do:
line* array = malloc(number_of_elements * sizeof(*array));
Of course don’t forget to also allocate memory for array.addr
and array.inst
.