所以我似乎无法让这个简单的函数指针在没有段错误的情况下运行
这是我正在使用的:
测试.c:
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
typedef void (*lwpfun)(void *);
static void indentnum(void * num);
int main(int argc, char *argv[]){
lwp_create((lwpfun)indentnum,(void*)42);
return 0;
}
static void indentnum(void *num) {
printf("Indent num: %d\n", *(int *)num);
}
lwp.c
#include "stdio.h"
#include <stdlib.h>
void lwp_create( void (*lwpfun)(void *), void *arg){
(*lwpfun)(arg); //Seg faulting
}
最佳答案
您将 num
作为 (void*)42
传递,这是一个垃圾指针,然后对其进行转换和取消引用。要么传递 int
变量的地址,要么(可移植性较差)将其转换回 int
。
关于调用传递给另一个函数的函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33203030/