| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4052 人关注过本帖
标题:怎样得到指针所指空间大小
只看楼主 加入收藏
nwpu063417
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:428
专家分:28
注 册:2007-5-11
结帖率:60%
收藏
 问题点数:0 回复次数:11 
怎样得到指针所指空间大小
如果我用malloc函数申请一块内存空间
void *p = malloc(5);
...
怎样能通过指针p,去求malloc函数开辟了多大的空间?
搜索更多相关主题的帖子: 所指 指针 空间 
2008-10-20 10:39
pinglideyu
Rank: 3Rank: 3
来 自:武汉工程大学
等 级:论坛游侠
威 望:1
帖 子:735
专家分:140
注 册:2007-1-7
收藏
得分:0 
好像有sizeof();这个函数可以。

~~我的明天我知道~~
2008-10-20 10:59
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
LS:不可以。

要不你写个malloc的壳儿:
void* my_malloc(....)
{
....
}

然后
#define malloc my_malloc

然后要怎么得到大小怎么得到大小。

要么你malloc的同时记下大小:
struct mem_t
{
    void* data;
    size_t size;
};
然后分配的时候,同时设置大小。

两种方法,任取其一,当然可以变通使用。

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-20 11:37
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
给一个示例程序给你:
程序代码:
#include <stdlib.h>

void* my_malloc(size_t size)
{
    void* data = malloc(size + sizeof(size_t));
    if (data == NULL) return NULL;
    *(size_t*)data = size;
    return (void*)&((size_t*)data)[1];
}

size_t my_get_size(void* data)
{
    return ((size_t*)data)[-1];
}

void my_free(void* data)
{
    free((void*)&((size_t*)data)[-1]);
}

#define malloc my_malloc
#define free my_free
#define getsize my_get_size

////////////////////////////////////////////////////////////////////////////////

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char *data = (char*)malloc(20);
    strcpy(data, "Hello World!");
    puts(data);
    printf("data's len:%d, size:%d\n", strlen(data), getsize(data));
    free(data);
    return 0;
}



专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-20 11:46
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1692
专家分:4282
注 册:2007-12-27
收藏
得分:0 
研究一下,应该有个什么地方记录着这个数值。
要不然free是怎么知道需要释放多大地方的呢?

不过根据具体实现的不同,也许这个数值记录在操作系统那边,那就不好找了。

一点不成熟的看法,貌似VC6里面,这个数值记录在
p=malloc(...);
size=*(int *)(p-16);
看起来很像哦。
欢迎拍砖

[[it] 本帖最后由 forever74 于 2008-10-20 13:19 编辑 [/it]]

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2008-10-20 13:17
rootkit
Rank: 1
等 级:新手上路
帖 子:197
专家分:5
注 册:2008-9-26
收藏
得分:0 
http://book.

降妖除魔路,仗剑载酒行
借问谁家子,大唐游侠儿
2008-10-20 13:37
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
[bo][un]forever74[/un] 在 2008-10-20 13:17 的发言:[/bo]

研究一下,应该有个什么地方记录着这个数值。
要不然free是怎么知道需要释放多大地方的呢?

不过根据具体实现的不同,也许这个数值记录在操作系统那边,那就不好找了。

一点不成熟的看法,貌似VC6里面,这个数 ...


你应该祈祷你在这么做的时候,你的老板没有站在你的身后,否则你有可能被当场解雇。

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-20 14:01
tomsheep
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-10-20
收藏
得分:0 
领教了~
2008-10-20 14:45
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1692
专家分:4282
注 册:2007-12-27
收藏
得分:0 
研究一下的意思就是说,不能用在产品代码里面,嘿嘿

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2008-10-20 15:05
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1692
专家分:4282
注 册:2007-12-27
收藏
得分:0 
实际上我这种做法是DOS程序员的职业病,是该被与时俱进给进掉了的用法。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2008-10-20 15:14
快速回复:怎样得到指针所指空间大小
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025537 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved