new and delete are C++ operators. malloc(), calloc(), and free() are ANSI C functions. Use sizeof() to determine how much memory to malloc() or calloc().
Try something like this.
struct self { int i; struct self *next; };
void main (void) { struct self *hilf; .... hilf->next = (struct self *) malloc (sizeof( struct self)); if (hilf->next == NULL) exit(1); else /* add null at the end of the list */ (hilf->next)->next = (struct self *) NULL; .... }