¿Cómo pasar por referencia una sub-matriz que está en una matriz 2D asignada dinámicamente?

Necesito pasar por subarreglas de referencia que forman parte de una matriz 2D asignada dinámicamente. He intentado el siguiente enfoque, que no parece funcionar. ¿Alguna idea si es posible?

void set1(int *a){
    a = malloc(2*sizeof(int));
    a[0] = 5;
    a[1] = 6;
}

void set2(int *a){
    a = malloc(2*sizeof(int));
    a[0] = 7;
    a[1] = 8;
}

int main(){
    int **x = malloc(2*sizeof(int*));

    set1(x[0]);   
    set2(x[1]);

    return 0;
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta