Захотелось написать просто динамический массив.

Сначала реализовал связанный список. Все работает все хорошо, но не очень красиво и очень похоже на велосипед. Вследствие недолгих размышлений пришел к мысли (Да обязательное условие only C):
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <netinet/in.h>
int main(int argc, char **argv) {
struct in_addr **_addr;
int i=0, n, c;
while( (c = getopt(argc, argv, "i:")) != EOF )
{
if(c == 'i'){
_addr[i] = (struct in_addr *)malloc(sizeof(struct in_addr));
inet_aton (optarg, &_addr[i]);
i++;
}
}
for( n=0; i>n; n++)
printf("Index %u of %u value %s \n", n, i, inet_ntoa(_addr[n]));
for( n=0; i>n; n++)
free( _addr[n] );
return 0;
}
Опять таки все здорово, но на free валимся.

Идеи закончились, вот обращаюсь ко многомудрым!