我以为我无法像.length
Java中的简单函数那样检索分配的内存块的长度.但是,我现在知道,在malloc()
分配块时,它会分配额外的字节来保存包含块大小的整数.该整数位于块的开头; 实际返回给调用者的地址指向刚刚超过此长度值的位置.问题是,我无法访问该地址来检索块长度.
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
char *str;
str = (char*) malloc(sizeof(char)*1000);
int *length;
length = str-4; /*because on 32 bit system, an int is 4 bytes long*/
printf("Length of str:%d\n", *length);
free(str);
}
Run Code Online (Sandbox Code Playgroud)
**编辑:我终于做到了.问题是,它持续给出0作为长度而不是我系统上的大小是因为我的Ubuntu是64位.我将str-4更改为str-8,现在可以使用了.
如果我将大小更改为2000,则会生成2017年的长度.但是,当我改为3000时,它给出3009.我正在使用GCC.
假设一个函数将void指针作为参数,如下所示:int func(void *p);
我们如何确定或猜测p指向的类型?
我有数组的指针(数组在内存中).我可以从指针计算数组的大小吗?我实际上不知道数组在内存中的位置.我只得到指针地址(假设9001)使用该地址我必须计算数组大小.
谢谢.