免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7664 | 回复: 14
打印 上一主题 下一主题

[函数] 问一个关于指针长度的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-02-16 21:40 |只看该作者 |倒序浏览
这个问题一直想问   
char str* = malloc(x);

在free(str)的时候,系统肯定是知道str*的长度的吧?
既然知道为什么函数库不提供一个函数让我获取str的长度

岂不是省略了每次传递str的时候还要传递个len

菜鸟问题,不知道有没有人问过

论坛徽章:
0
2 [报告]
发表于 2010-02-16 21:55 |只看该作者
这个跟指针的长度有什么关系?

论坛徽章:
0
3 [报告]
发表于 2010-02-16 23:12 |只看该作者
词不搭意。你想说的是分配内存块的大小。C/C++指针长度在32位系统下总是32bits。
你是想要一个alloc_length(void * p)这样的库函数吧。但你怎么能保证p一定是malloc/calloc分配的呢?如果是一个无效指针,找内存块是可能出访问异常的。其实free(void * p)的确能得到内存块的大小,不同的编译器和C标准库实现可能有差异。要想知道你用的C库怎么得到内存块大小,可以读读你的C库的free实现源码。微软、GNU和Borland的C库都有源码。

论坛徽章:
0
4 [报告]
发表于 2010-02-16 23:25 |只看该作者
回复 3# 没本


    或许你想的和楼主想问的不一样,嘻嘻安在只有 楼主知道,等他出来说清楚吧

论坛徽章:
0
5 [报告]
发表于 2010-02-16 23:47 |只看该作者
本帖最后由 houtinghua 于 2010-02-16 23:48 编辑

我菜鸟  原来内存分配可以不用malloc   谢谢


我去看看源码

论坛徽章:
0
6 [报告]
发表于 2010-02-16 23:48 |只看该作者
sizeof
strlen

论坛徽章:
0
7 [报告]
发表于 2010-02-16 23:53 |只看该作者
回复 6# prolj 这两个函数不就是获取长度的吗?

论坛徽章:
0
8 [报告]
发表于 2010-02-16 23:58 |只看该作者
lz刚才问怎么获取长度啊,只是又编辑掉了。

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
9 [报告]
发表于 2010-02-17 17:08 |只看该作者
这个问题一直想问   
char str* = malloc(x);

在free(str)的时候,系统肯定是知道str*的长度的吧?
既然 ...
houtinghua 发表于 2010-02-16 21:40


其实我也有这个疑问,感觉增加这么一个库函数也不错啊。

你是想要一个alloc_length(void * p)这样的库函数吧。但你怎么能保证p一定是malloc/calloc分配的呢?如果是一个无效指针,找内存块是可能出访问异常的。没本 发表于 2010-02-16 23:12


realloc和free也不能保证p一定是malloc/calloc分配的,但这不影响它们的存在。

论坛徽章:
0
10 [报告]
发表于 2010-02-17 19:28 |只看该作者
如果是二进制数据串倒还情有可原。
说到纯字符串,每次传str你还另外记住它的len?{:3_182:}那strlen是干嘛用的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP