У меня есть драйвер, который я изменяю, который был написан кем-то еще в C. Поскольку мне нужно добавить некоторые вызовы функций C++, я теперь создаю драйвер с компилятором C++ по сравнению с компилятором C (в Visual Studio 2012). Когда я перешел на C++, я получил много ошибок сборки, все из которых я смог исправить, за исключением нескольких. Несколько ошибок связаны с вызовами одной и той же функции. Я много искал в Интернете, пытаясь найти решение этой проблемы без каких-либо успехов. Итак, ниже приведены компоненты этой проблемы, которые, я надеюсь, позволят кому-то помочь мне в этом вопросе.Указатель на указатель на функцию функции Void
Во-первых, здесь вызывается функция. Возможно, вам интересно, почему оригинальный разработчик S/W создал собственную функцию свободной памяти, когда они могли просто использовать функцию free() в стандартной библиотеке C. Я не знаю, почему это было, но так как он работал нормально, я не решаюсь изменить его.
void freeMemory(void **pBuffer)
{
BOOL result;
ASSERT(pBuffer != NULL);
// see if buffer is already been freed
if (*pBuffer == NULL)
{
return;
}
result = VirtualFree(
*pBuffer, // LPVOID lpAddress, // address of memory
0, // SIZE_T dwSize, // size of memory
MEM_RELEASE // DWORD dwFreeType // operation type
);
// see of we were able to successfully free the memory
if (result == FALSE)
{
ASSERT(FALSE);
return;
}
// Mark the buffer pointer as now being free
*pBuffer = NULL;
}
Так следующая часть этой головоломки является #define следующим образом:
#define FREE(pBuffer) freeMemory(&(pBuffer))
Наконец, ниже один из многих обращений к этой БЕСПЛАТНОЙ функции:
FREE(Buffer);
В этот пример, «Буфер» является указателем на символ без знака.
unsigned char *Buffer;
Для справочных целей, ошибка, что я получаю, для этого конкретного примера, «не может преобразовать параметр 1 из„неподписанные символ *“до„пустота **“»
Это было давно так как я много сделал с прямым C или C++, и указатели никогда не были моим сильным набором. Основываясь на этой ошибке, я предположил, что эта ошибка связана с тем, что она не обеспечивает приведение в вызов функции, но, учитывая, как функция free() используется из стандартной библиотеки C, похоже, что это не должно быть необходимым. Любая помощь в том, что мне нужно сделать в отношении того, как функция FREE вызывается для устранения этих ошибок, будет с большой благодарностью.
Похожие: http://stackoverflow.com/questions/25427587/void- a-generic-pointer – Quentin
Была ли память первоначально выполнена VirtualAlloc? – ryyker
Это сообщение об ошибке должно читать «[...] от **' unsigned char ** '** до' void ** '[...]", и это преобразование не должно работать в C либо. – mafso