繁体   English   中英

保存参数传递的函数指针

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM