繁体   English   中英

无法调用指向函数的指针返回指针

[英]Unable to call a pointer to function returning a pointer

我遇到了一个奇怪的问题。 我有两个文件ac和bc如下:bc:

#include <stdlib.h>

int *foo() {
  int *x;
  x = (int *) malloc(sizeof(int));
  *x = 4;
  return x;
}

我使用gcc编译bc到b.so:$ gcc -o b.so -shared -fpic

AC:

#include <stdio.h>
#include <dlfcn.h>

int main() {
  void *hdl;
  hdl = dlopen("./b.so", RTLD_LAZY);
  int *((*fn)(void));
  int *x;
  x = (*fn)();
  fn = dlsym(hdl, "foo");
  printf("%d", *x);
}

我用gcc编译ac:

$ gcc -fpic -ldl ac

现在当我运行它:

$ ./a.out分段错误

我哪里错了? 这在bc中的函数不返回指针时有效。

而且,我尝试使用dlerror()检查错误,但它没有报告。

通过检查,您在初始化之前使用fn 它还没有指向foo ,它还没有特别指出任何东西,我怀疑结果行为是未定义的。

您没有找到符号并调用该函数。

当你做x = (*fn)(); 它不会从bc调用函数foo

您必须先将符号加载到函数指针中。

  int *x;
  fn = dlsym(hdl, "foo");
  x = fn();
  printf("%d", *x);

以上应该有效。

编辑:

dlopen的示例程序,dlsym可以在这里找到相同的手册页信息。

可能只是您示例的问题,但在您提供的代码中,您需要切换以下行:

 x = (*fn)();
fn = dlsym(hdl, "foo");

这两行看起来顺序错误:

x = (*fn)();
fn = dlsym(hdl, "foo");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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