This is a struct definition, you cannot malloc or use any function inside a declaration, because the declaration does not get executed, it is merely a kind of template on how a struct of type 'map' should look like, that way the compiler will know how much memory should be allocated to struct map when we create an instance of it.
when you want to use members inside struct map(for example make the pointer link point to some viable memory segment) you need to create an instance of 'map' somewhere, and only then you will be able to call malloc and make link point to the resulting memory segment.
the way to fix this is first declare the struct like so:
struct map{
int city;
struct map **link;
};
and when you create an instance of the struct in main, you can allocate space for link like so:
int main()
{
struct map *temp = malloc(sizeof(struct map));
temp->link = malloc(204800*sizeof(struct map *));
return 0;
}