I am trying to understand what this means, the code I am looking at has
in .h
typedef void (*MCB)();
static MCB m_process;
in .C
MCB Modes::m_process = NULL;
And sometimes when I do
m_process();
I get segmentations fault, it's probably because the memory was freed, how can I debug when it gets freed?
I hope my questions are clear.
It introduces a function pointer type, pointing to a function returning nothing (void), not taking any parameters and naming the new type MCB.
It defines a pointer-to-function type. The functions return void, and the argument list is unspecified because the question is (currently, but possibly erroneously) tagged C; if it were tagged C++, then the function would take no arguments at all. To make it a function that takes no arguments (in C), you'd use:
This is one of the areas where there is a significant difference between C, which does not - yet - require all functions to be prototyped before being defined or used, and C++, which does.
The typedef defines
MCB
as the type of a pointer to a function that takes no arguments, and returnsvoid
.Note that
MCB Modes::m_process = NULL;
is C++, not C. Also, in C, the typedef should really betypedef void (*MCB)(void);
.I'm not sure what you mean by "the memory was freed". You have a static pointer to a function; a function cannot be freed. At most, your pointer has been reset somewhere. Just debug with a memory watch on
m_process
.It's a function pointer. You get a SEGMENTATION FAULT because you are trying to make a call to a function which address is invalid (
NULL
).According to your specific sample, the function should return no value (
void
) and should receive no parameters()
.This should work:
Function pointers are commonly used for some form of event handling in C. It's not its only use though...
Let's take an example
Here, we are defining a type pt2fn. Variables of this type point to functions, that take an integer as argument and does not return any value.
Here, kk is a variable of type pt2fn, which can point to any function that takes in an integer as input and does not return any value.