Что не так с приведением типа (void **) и device_array?
Естьэтот ответ на другой вопрос об использованииcudaMalloc((void**)&device_array, num_bytes)
, который используетvoid**
в качестве выходного аргумента вместо передачиvoid*
в качестве возвращаемого значения, как стандартmalloc
.
Он критикует API NVIDIA и заявляет:
Приведение, как в (void **) & device_array, является недопустимым C и приводит к неопределенному поведению.
и за него проголосовали несколько раз (8 на данный момент), поэтому я предполагаю, что в этом есть доля правды.
Я не понимаю, что не так с кастингом там.
Что здесь неверно?В каком случае это приведет к неопределенному поведению?Все, что я знаю, это то, что он компилируется без предупреждения и работает с предполагаемым для меня поведением. Но я не знаком с C до стандартного уровня спецификации.