Dynamic Memory Management for Structs in C