In the line
priorities[currIdx] = (int) rand() % 10;
you are trying to assign an int on the right-hand-side (rhs) of the the = to something that has type int* on the left-hand-side (lhs). The lhs is a variable that holds a pointer to a storage location where you can store an int. So, in order to write to that location, you first must dereference the pointer variable with *priorities[currIdx]. This tells the compiler: "Don't write to the variable itself but look up the location where it points and write there."
This is similar to what you do when you say priorities[currIdx] in the first place. The variable priorities is an int**. That's a pointer to a pointer to an int. You don't want to override the variable itself but you want to write the location it points to (which has type int*) with a fresh pointer. In that case you dereference saying priorities[currIdx] which is equivalent to *(priorities + currIdx).
However, allocating an extra int for each slot of the array is not only unneccessary and cumbersome, it also makes your code much slower. You can have an array of ints directly, by simply passing int* priorities. Then you can just drop the malloc line alltogether and write to the array as you do in your question originally. That is, without dereferencing:
priorities[currIdx] = (int) rand() % 10;
because priorities[currIdx] will then have type int.