Yo, quick question.

I'm tooling around with pointers, arrays, and malloc.

My ultimate goal is to manage an array of pointers that is flexible. But had some questions regarding memory behavior.

Code:
void * pointers[0];

int main(int argc, char * argv[]) {
	int a = 5;
	int b = 6;
	
        //#1
	//-shouldn't this cause a memory error? I haven't allocated enough space,
	// and the declaration of the variable specifies "0" items.
	//-does it not cause a memory error because "pointers" is on the heap?
	pointers[4] = &a;
	
        //#2
	//allocate space for pointers
        //-is this the right way to allocate space for an array variable?
        //-does allocating space for a file-scoped variable leak memory? Taking into account that I didn't allocate the memory that was there to begin with? Or should I use realloc?
	*pointers = malloc( sizeof(void *) );
	pointers[0] = &a;
	
        //#3
	//-shouldn't these create memory errors? I only allocated space for 1 pointer.
	pointers[1] = &b;
	pointers[2] = &a;
	
	int * c = pointers[0];
	int * d = pointers[1];
	int e = *((int *)pointers[0]);
	printf("%i %i %i\n",*c,*d,e);
	return 0;
}
My questions are inline in the code.

Thanks for any help!