Чтобы буквально ответить на ваш вопрос, вы должны написать
int c = *((int *)args0[0]);
long d = *((long *)args[1]);
Что вас может беспокоить в вашем коде, так это то, что вы выделили место для указателей на ваши местоположения, но выне выделил память для значений .Если вы планируете сохранить эти местоположения за пределами локальной области действия, вы должны сделать что-то вроде:
int *al = malloc(sizeof(int));
long *bl = malloc(sizeof(long));
*al = a;
*bl = b;
void **args0 = malloc(2 * sizeof(void *));
args0[0] = al;
args0[1] = bl;