社区
Linux/Unix社区
帖子详情
请教动态库函数指针的使用问题
小新小新小新
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
打赏
收藏
请教动态库函数指针的使用问题
函数的指针定义成:int (*TeOpen)(ulong instance,te_handle *hdl); 说明:动态库中的函数名也为TeOpen,在执行时,TeOpen=dlsym(dp,"TeOpen");成功,但是在执行别的函数时会出现段错误; 如果把函数指针改成int (*OPEN)(ulong instance,te_handle *hdl);则无任何错误。 仅仅是更改了函数指针的名称就能导致段错误,不知道是为什么?与动态库有关系吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
我觉得是其他地方有内存溢出了。正好影响到你的这段代码。
《C经典面试》编译链接、指针、内存bug、函数、其它
指针:指针概念、数组相关的指针、字符串指针、
函数指针
等 3.内存bug:内存越位、内存覆盖、
使用
非法内存、内存泄露等。 4.函数:自定义函数、内联函数、回调函数、变参函数、递归函数、库函数等 5.其它:自动类型...
嵌入式开发——用C语言调用C++的
动态库
时
函数指针
为空
查明原因是
函数指针
为空,我确认了
动态库
是成功加载的,那还找不到函数,我就怀疑是客户给的
动态库
有
问题
,会不会头文件和
动态库
对应不上,
动态库
里根本没有这个名字的函数。于是我用nm命令去查看
动态库
的符号,果然...
函数指针
和指针函数以及
函数指针
数组
在调用
动态库
时,习惯用typedef重新定义
动态库
函数中的函数地址(
函数指针
),如在
动态库
(test.dll)中有如下函数: int DoCase(int, long); 则,在调用
动态库
是有两种方法: 1. 先声明一个与
动态库
中...
java 封装
动态库
_java通过JNI方法封装VC++的Dll(大四实习+1)
说明:两天前,老大直接给了一个
动态库
和接口函数说明,叫我封装好方便java环境调用接口函数,java没搞过啊,C++也才接触几个月,在网上找了一些文档,全是入门级的,全是自己去建dll,然后再调,没有用java编程软件...
回调函数
因为程序中很少用到
函数指针
,所以一直对
函数指针
带有一种陌生感和恐惧感,但作为一名程序员,不能再让这种陌生和恐惧感继续下去了,因此,到处找资料,拜读前辈写的博客,向同事
请教
,讨论。如果你也像我有同感,就...
Linux/Unix社区
23,116
社区成员
74,507
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章