Here is the code for this example (source):
// Allocate insufficient memory for a struct
// Created for COMP2521 sanitiser guide
#include <stdlib.h>
typedef struct node *Node;
struct node {
int val;
Node next;
};
int main(void) {
Node n = malloc(sizeof(Node));
n->val = 0;
n->next = NULL;
free(n);
return 0;
}
Here is the error message:

n->next = NULL;.Node n = malloc(sizeof(Node));.n was only 8 bytes.Here we’ve defined a linked list node struct struct node, and typedef’d a pointer to it as Node. In the main function, we’ve allocated memory for a new node, however we only allocated sizeof(Node) bytes. But Node is the same as struct node *, so this is equivalent to sizeof(struct node *), and all pointers are 8 bytes in size.
In this case our struct contains an integer (4 bytes) and a pointer to the next node (8 bytes), so we would need 12 bytes of memory for this struct. But since we only allocate enough space for a pointer (8 bytes), we haven’t allocated enough memory.
Rather than sizeof(n), we should use sizeof(*n) (i.e. the size of the memory that n points to) or equivalently sizeof(struct node).