请教动态库函数指针的使用问题

小新小新小新 2010-08-25 02:28:56
函数的指针定义成:int (*TeOpen)(ulong instance,te_handle *hdl);
说明:动态库中的函数名也为TeOpen,在执行时,TeOpen=dlsym(dp,"TeOpen");成功,但是在执行别的函数时会出现段错误;

如果把函数指针改成int (*OPEN)(ulong instance,te_handle *hdl);则无任何错误。
仅仅是更改了函数指针的名称就能导致段错误,不知道是为什么?与动态库有关系吗?
...全文
136 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwwunix 2010-08-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhanghuanxin 的回复:]

都改成abc是可以的,没有错误,奇怪了
[/Quote]
基本可以确定是其他地方溢出了。
改成abc,内存占用小了。其他地方溢出后,没有影响到这里。再改回去,内存占用变大了。就可能又影响到这里了。
山椒π 2010-08-25
  • 打赏
  • 举报
回复
是不不能与你加载进的库中函数名相同? 就像函数名不能起关键字一样?
小新小新小新 2010-08-25
  • 打赏
  • 举报
回复
头文件中是这样就没有问题:
……
te_err_t (*abc)(ulong instance,te_handle *hdl);
//te_err_t (*TeOpen)(ulong instance,te_handle *hdl);
……
是这样的就有问题:
……
te_err_t (*abc)(ulong instance,te_handle *hdl);
te_err_t (*TeOpen)(ulong instance,te_handle *hdl);
……

两者的区别是,后者多了一个函数指针。
小新小新小新 2010-08-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhanghuanxin 的回复:]
仅仅是更改了函数指针,不应该有溢出吧
[/Quote]
我做过这个实验了,都改成abc是可以了,没有段错误了,我再改回去试试
小新小新小新 2010-08-25
  • 打赏
  • 举报
回复
都改成abc是可以的,没有错误,奇怪了
wwwunix 2010-08-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jessiefn 的回复:]

也许限制函数指针与函数名称不能一样呢..
试试把函数指针与函数名称都改为abc,看看还会不会段错误?
[/Quote]
函数指针和函数名称可以一样。
wwwunix 2010-08-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhanghuanxin 的回复:]

仅仅是更改了函数指针,不应该有溢出吧
[/Quote]
不是说函数指针溢出,而是其他地方的溢出正好影响到你的函数指针。
jessiefn 2010-08-25
  • 打赏
  • 举报
回复
也许限制函数指针与函数名称不能一样呢..
试试把函数指针与函数名称都改为abc,看看还会不会段错误?
小新小新小新 2010-08-25
  • 打赏
  • 举报
回复
仅仅是更改了函数指针,不应该有溢出吧
wwwunix 2010-08-25
  • 打赏
  • 举报
回复
我觉得是其他地方有内存溢出了。正好影响到你的这段代码。

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧