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.