вы сразу записываете из выделенной памяти:
int size=0;
char**moedas=malloc(size*sizeof(char*));
moedas[0]=arga[3];
, поскольку индекс 0 находится вне malloc (0)
, затем в первом цикле , в то время как когда i равно 4 в строке
moedas[i-3]=arga[i]
, поскольку индекс 1 также не соответствует malloc (0)
После инициализации редактирования size до 1: первая ошибка исчезнет (индекс 0 допустим), но не вторая, где индекс равен 1