Dog*_*Dog 39 c++ typedef static-members void-pointers
我试图理解这意味着什么,我正在看的代码
在.h
typedef void (*MCB)();
static MCB m_process;
Run Code Online (Sandbox Code Playgroud)
在.C
MCB Modes::m_process = NULL;
Run Code Online (Sandbox Code Playgroud)
有时当我做的时候
m_process();
Run Code Online (Sandbox Code Playgroud)
我得到了分段错误,这可能是因为内存被释放了,我怎样才能在它被释放时进行调试?
我希望我的问题很清楚.
Jon*_*ler 46
它定义了一个指向函数的指针类型.函数返回void,并且参数列表未指定,因为问题是(当前,但可能是错误地)标记为C; 如果它被标记为C++,则该函数根本不会参数.为了使它成为一个不带参数的函数(在C中),你可以使用:
typedef void (*MCB)(void);
Run Code Online (Sandbox Code Playgroud)
这是C之间存在显着差异的领域之一,C还没有 - 要求所有函数在定义或使用之前都要进行原型化,而C++则需要.
让我们举个例子
typedef void (*pt2fn)(int);
Run Code Online (Sandbox Code Playgroud)
在这里,我们定义了一个类型 pt2fn。这种类型的变量指向函数,该函数采用整数作为参数并且不返回任何值。
pt2fn kk;
Run Code Online (Sandbox Code Playgroud)
这里,kk 是一个 pt2fn 类型的变量,它可以指向任何以整数作为输入并且不返回任何值的函数。
参考: https: //cs.nyu.edu/courses/spring12/CSCI-GA.3033-014/Assignment1/function_pointers.html
typedef 定义MCB为指向不带参数的函数的指针的类型,并返回void.
请注意,这MCB Modes::m_process = NULL;是 C++,而不是 C。此外,在 C 中,typedef 应该真的是typedef void (*MCB)(void);.
我不确定您所说的“内存已释放”是什么意思。你有一个指向函数的静态指针;一个函数不能被释放。最多,您的指针已在某处重置。只需使用内存手表进行调试即可m_process。