相关疑难解决方法(0)

如何在malloc之后获得内存块长度?

我以为我无法像.lengthJava中的简单函数那样检索分配的内存块的长度.但是,我现在知道,在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.

c malloc

16
推荐指数
5
解决办法
3万
查看次数

C:来自void指针的外推类型

假设一个函数将void指针作为参数,如下所示:int func(void *p);
我们如何确定或猜测p指向的类型?

c pointers void-pointers

13
推荐指数
3
解决办法
8811
查看次数

如何从指针变量计算数组的大小?

我有数组的指针(数组在内存中).我可以从指针计算数组的大小吗?我实际上不知道数组在内存中的位置.我只得到指针地址(假设9001)使用该地址我必须计算数组大小.

谢谢.

c arrays pointers

2
推荐指数
2
解决办法
2650
查看次数

标签 统计

c ×3

pointers ×2

arrays ×1

malloc ×1

void-pointers ×1