#include #include #define log_2d(pointer) \ printf("Value: %p, %u, %u\n", pointer, pointer->x, pointer->y) #define log_3d(pointer) \ printf("Value: %p, %u, %u, %u\n", pointer, pointer->x, pointer->y, \ pointer->z) typedef struct Point2D { int x, y; } Point2D; typedef struct Point3D { int x, y, z; } Point3D; int main(void) { printf("Allocation Thinkering: \n"); Point2D *heap_point_2d = malloc(sizeof(Point2D)); Point2D *heap_point_2d_2 = malloc(sizeof(Point2D)); Point3D *heap_point_3d; log_2d(heap_point_2d); *heap_point_2d = (Point2D){1, 2}; *heap_point_2d_2 = (Point2D){3, 4}; heap_point_3d = (Point3D *)(heap_point_2d); log_3d(heap_point_3d); log_2d(heap_point_2d); log_2d(heap_point_2d_2); free(heap_point_2d); log_2d(heap_point_2d); log_2d(heap_point_2d_2); log_3d(heap_point_3d); heap_point_2d = malloc(sizeof(Point2D)); *heap_point_2d = (Point2D){5, 6}; log_2d(heap_point_2d); log_2d(heap_point_2d_2); log_3d(heap_point_3d); free(heap_point_2d_2); log_2d(heap_point_2d); log_2d(heap_point_2d_2); log_3d(heap_point_3d); exit(0); }