我遵循声明:
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;
}
正在制作段错误。我会感激任何提示。
答案 0 :(得分:0)
修改强> 根据您的完整代码,您应该将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);
}
答案 1 :(得分:0)
根据您粘贴的代码,您在哪里实际定义类型
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);