malloc() takes an argument (the number of bytes to allocate) and returns a pointer to the newly allocated memory. The correct usage is something like this:
int* numbers=(int*)malloc(5*sizeof(int));
That is to say, you want an amount of memory equal to 5 times the size of a single int, and when it's allocated, you want to cast the starting memory address to a pointer to int, and assign its value to a variable of type pointer to int.
In the real world, you usually want to keep track of the length somewhere else, so you'd do something more like this:
int n=5;
int* numbers=(int*)malloc(n*sizeof(int));
Now you can just keep referring to n later on, and you only have to change its value once in order to change all the corresponding program logic, rather than replacing the magic number 5 in every single spot where it gets used.