O que há de errado com a transmissão como (void **) e device_array?

Há simesta resposta em outra pergunta sobre o uso decudaMalloc((void**)&device_array, num_bytes), que usavoid** como argumento de saída em vez de passar umvoid* como valor de retorno como o padrãomalloc.

Critica a API da NVIDIA e declara:

A transmissão, como em (void **) & device_array, é C inválida e resulta em comportamento indefinido.

e foi votado várias vezes (8 a partir de agora), então suponho que exista alguma verdade nele.

Eu não entendo o que há de errado em lançar lá.

O que é C inválido aqui?Em que caso isso levaria a um comportamento indefinido?

Tudo o que sei é que ele compila sem aviso e é executado com o comportamento pretendido para mim. Mas não conheço C até o nível de especificação padrão.

questionAnswers(1)

yourAnswerToTheQuestion