1:
Есть такой код:
#define MEM_RESERV_SIZE 32767
static void *MemBuf = NULL;
static unsigned int MemBufPos = 0;
void MemReservStart(void)
{
if (!MemBuf) MemBuf = XMalloc(MEM_RESERV_SIZE);
}
void MemReservEnd(void)
{
XFree(XMemBuf);
}
void *MemReservAlloc(unsigned int size)
{
if (!MemBuf || (MemBufPos += size) > MEM_RESERV_SIZE) exit(EXIT_FAILURE);
return MemBuf + MemBufPos - size;
}
В функции MemReservAlloc() компилятор ругается на return MemBuf + MemBufPos — size:
"error: expression must be a pointer to a complete object type return XMemBuf + XMemBufPos — size"
В чём может быть причина и как это исправить?
2:
Функция:
XMemFree(void **point, const char *file, unsigned int line)
вызывается через такую конструкцию:
#define XFree(point) XMemFree(&((void *)(point)), __FILE__, __LINE__)
При компиляции как C-код всё нормально, а как С++ код выдаёт ошибку:
"error: expression must be an lvalue or a function designator".
В чём может быть причина и как это исправить?