Diferença entre retorno 1, retorno 0, retorno -1 e saída?

Por exemplo, considere o seguinte código:

int main(int argc,char *argv[])
{
   int *p,*q;
   p = (int *)malloc(sizeof(int)*10);
   q = (int *)malloc(sizeof(int)*10);
   if (p == 0)
{
    printf("ERROR: Out of memory\n");
        return 1;
}


   if (q == 0)
{
    printf("ERROR: Out of memory\n");
        exit(0);
}

   return 0;
}

O quereturn 0, return 1, exit(0) fazer no programa acima?exit(0) sairá do programa total e o controle sairá do circuito, mas o que acontece no caso dereturn 0, return 1, return -1.

questionAnswers(6)

yourAnswerToTheQuestion