[英]Saving function pointer passed by argument
我遵循以下声明:
typedef void (*foo)(int op, int arg1, int arg2);
void goo(foo f);
{
BODY;
}
而且我想在代码中存储传递给goo的函数f,但是可以自然地修改body并添加全局foo变量(我无法更改goo的定义,但可以编辑body):
foo _f;
void goo(foo f);
{
_f = f;
}
正在进行段错误。 如果有任何提示,我将不胜感激。
编辑根据完整的代码,应该在test.c中将函数callback()的名称更改为“ callback”以外的名称,因为您已经在pagesim.c中定义了符号。 我进行了此编辑,程序运行正常。
这是一个可以编译并运行的测试,也许您可以根据此发现错误:
#include <stdio.h>
typedef void (*foo)(int op, int arg1, int arg2);
foo _f;
void goo(foo f)
{
_f = f;
_f(1, 2, 3);
}
void testfxn(int op, int arg1, int arg2) {
printf("%d %d %d", op, arg1, arg2);
}
void main() {
goo(testfxn);
}
从您粘贴的代码中,您实际的类型的函数定义在哪里?
void func(int op, int arg1, int arg2)
段故障来自goo()
,您将看到printf()
输出,但是以下对callback2()
调用会生成段故障。 callback2
是一个函数指针,但没有指向任何实际函数。
你应该定义一个函数
void func(int op, int arg1, int arg2)
{
printf("%d %d %d\n", op, arg1, arg2);
}
然后您将goo()
和page_sim_init()
称为
goo(func);
page_sim_init(page_size, mem_size, addr_space_size,
strategy, max_concurrent_operations, func);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.