Я видел функцию, прототип:Является ли void ** приемлемым типом в ANSI-C?
int myfunc(void** ppt)
Эта функция вызывается в файле C как а = MyFunc (MyStruct ** var1);
где mystruct является typedef для одной из структуры, которую мы имеем.
Это работает без каких-либо ошибок компиляции в MSVC6.0, но когда я скомпилировать его с каким-либо другим компилятором, он дает ошибку в том месте, где эта функция вызывается с сообщением об ошибке:
Аргумент типа mystruct ** несовместим с параметром типа void **
Аргумент myfunc() сохраняется как void **, потому что он представляет собой общий тип функции malloc, который должен вызываться с различными типами переменных структуры для памяти распределение
- Есть ли какой-либо тип, такой как void **, разрешенный в C-стандартном/любом компиляторе C?
- Как исправить это? [Я попытался заливкой аргумент вызова функции для
mystruct**
, но он не работает]
-AD
Это вызывает неопределенное поведение (изменение объекта через указатель на неправильный тип). API просто сломан; любая функция типа распределения, которая выделяет общую память (`void *`), должна возвращать указатель, а не принимать аргумент с двумя указателями. К счастью, такие сломанные API можно просто обернуть, чтобы исправить их ... – 2011-11-06 08:49:08