为什么char指针保存的数据比C中分配的内存多?

VMi*_*VMi 0 c malloc pointers char

在C语言中进行动态内存分配时,将内存大小分配给char指针时,我感到困惑。虽然我只给出1个字节作为限制,鉴于每个字母对应于1个字节,char指针成功地尽可能长地获取了输入

我也试图找到输入前后的指针大小。有人可以帮我了解这里发生了什么吗?输出使我感到困惑。

看下面的代码:

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

int main()
{
    int limit;

    printf("Please enter the limit of your string - ");
    gets(&limit);

    char *text = (char*) malloc(limit*4);

    printf("\n\nThe size of text before input is %d bytes",sizeof(text));

    printf("\n\nPlease input your string - ");
    scanf("%[^\n]s",text);

    printf("\n\nYour string is %s",text);

    printf("\n\nThe size of char pointer text after input is %d bytes",sizeof(text));

    printf("\n\nThe size of text value after input is %d bytes",sizeof(*text));

    printf("\n\nThe size of ++text value after input is %d bytes",sizeof(++text));

    free(text);



    return 0;


}
Run Code Online (Sandbox Code Playgroud)

检查以下输出: 在此处输入图片说明

Mos*_*afa 5

之所以有效,是因为malloc通常不会分配您传递给它的相同数量的字节。它保留多个“块”的内存。它通常会保留更多内存,以“缓存”它以供下一次malloc调用,以实现优化。(这是特定于实现的)例如检查 glibc malloc内部

使用比malloc分配的内存更多的内存是未定义的行为。您可能会覆盖保存在堆上的malloc的元数据或破坏其他数据。

我也试图找到输入前后的指针大小。有人可以帮我了解这里发生了什么吗?输出使我感到困惑。

对于机器中的所有指针类型,指针的大小是固定的,取决于地址大小,通常为4/8字节。它与数据大小无关。