devxlogo

C-Style Function Pointers

C-Style Function Pointers

Question:
While trying to port some C code to a C++ implementation, I ran into this problem. The module this came out of was designed to “automate data handling used to free and allocate memory as needed.” When compiling the legacy code in VC++ (it was compilable with WATCOM C/C++ 11.0), I got a function pointer for allocs from a memory management module that looks like this:

void *(*gAlloc)(size_t size);

It generates this error:

    i:sponlinesrcmdc.cpp(18) : error C2040: ‘gAlloc’ : ‘void *(*)(unsigned int)’ differs in levels of indirection from ‘void (*)(unsigned int)’

I understand the “size_t” attribute is out of string.h, but I’ve never run into a case of “levels of indirection.” Does this mean that in C++ you can’t have “void *(*…”?

Answer:
The size_t parameter is not the problem. Rather, it seems like the function pointer you’re passing doesn’t match the expected type. gAlloc is a pointer to a function that takes size_t and returns void*, whereas the expected type is a pointer to function that takes size_t and returns void. In other words, the return types, void and void*, don’t match.

You should check the declaration of the function that takes gAlloc and see what the expected pointer type is.

See also  Professionalism Starts in Your Inbox: Keys to Presenting Your Best Self in Email
devxblackblue

About Our Editorial Process

At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

See our full editorial policy.

About Our Journalist