malloc真正分配了多少内存?

use*_*789 -2 c

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

main()
{
    int *ptr,i;
    ptr=(int*)malloc(sizeof(int));
    printf("sizo of ptr is:%d",sizeof(ptr));

    for(i=0;i<30;i++)
        scanf("%d",ptr+i);

    for(i=0;i<30;i++)
        printf("%d",*(ptr+i));

    getch();
}
Run Code Online (Sandbox Code Playgroud)

这里ptr的大小是:4我的问题是,我想在ptr中只存储一个整数但是在这个程序中我可以存储超过30或100等,为什么它不会抛出错误?

Ser*_* L. 5

Malloc以系统页面大小的块(通常为4096字节)分配堆空间,但它仅保留供您使用,与您请求的完全一致.如果您的写入超出了您的malloc内存,那么您可能会因为违反分段而破坏堆或使程序崩溃.

只有当你要求的内存保证是真正使用.您请求的内存块可能是有效的,但是由其他东西使用(例如stdio库缓冲区)或保留供将来使用(例如下次malloc调用).