m*t 发帖数: 7490 | 1 例如已经分配了20bytes的一个指针
char *p=(char *)malloc(sizeof(char)*20);
这时用sizeof(p)只能返回 这个指针变量自身的空间大小,32位系统是4,而不是20
不知道有没有什么函数能够返回20这个值? |
t****t 发帖数: 6806 | 2 no
【在 m*t 的大作中提到】 : 例如已经分配了20bytes的一个指针 : char *p=(char *)malloc(sizeof(char)*20); : 这时用sizeof(p)只能返回 这个指针变量自身的空间大小,32位系统是4,而不是20 : 不知道有没有什么函数能够返回20这个值?
|
m****t 发帖数: 37 | 3 java可以ms...
【在 m*t 的大作中提到】 : 例如已经分配了20bytes的一个指针 : char *p=(char *)malloc(sizeof(char)*20); : 这时用sizeof(p)只能返回 这个指针变量自身的空间大小,32位系统是4,而不是20 : 不知道有没有什么函数能够返回20这个值?
|
s*****k 发帖数: 604 | 4 我觉得是 malloc 和 free 会维护一个记录表,你看不到而已。不同的系统实现好像不
太一样的。
【在 m*t 的大作中提到】 : 例如已经分配了20bytes的一个指针 : char *p=(char *)malloc(sizeof(char)*20); : 这时用sizeof(p)只能返回 这个指针变量自身的空间大小,32位系统是4,而不是20 : 不知道有没有什么函数能够返回20这个值?
|
p***m 发帖数: 387 | 5 this is every C programmer's dream |
z**k 发帖数: 629 | |
K*****n 发帖数: 65 | 7 In Visual C++,
char *p=(char *)malloc(sizeof(char)*20);
int size = *( (int*)((char*)p-16) ); //size = 20 as expected |
p********o 发帖数: 640 | 8 分配的时候 标记下 就知道了哈哈
一般传字符串参数的时候也会带长度啊
传结构体 也是有结构的
感觉这个长度还是挺好控制的嘛O(∩_∩)O
【在 m*t 的大作中提到】 : 例如已经分配了20bytes的一个指针 : char *p=(char *)malloc(sizeof(char)*20); : 这时用sizeof(p)只能返回 这个指针变量自身的空间大小,32位系统是4,而不是20 : 不知道有没有什么函数能够返回20这个值?
|
r*********r 发帖数: 3195 | |
m****t 发帖数: 37 | 10 最简单的办法
分配前sbrk(0)获得分配前堆顶
分配后sbrk(0)获得分配后堆顶
把两个一减
不过malloc都是按照字节对齐分配的,应该分配了32个bytes吧
【在 m*t 的大作中提到】 : 例如已经分配了20bytes的一个指针 : char *p=(char *)malloc(sizeof(char)*20); : 这时用sizeof(p)只能返回 这个指针变量自身的空间大小,32位系统是4,而不是20 : 不知道有没有什么函数能够返回20这个值?
|