malloc真正分配了多少内存?

时间:2014-09-04 13:29:30

标签: 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();
}

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

1 个答案:

答案 0 :(得分:5)

Malloc以系统页面大小的块(通常为4096字节)分配堆空间,但它仅为您的使用保留,与您请求的完全一致。如果您在malloc内存之外写作,则可能会因违反分段而损坏您的堆或导致程序崩溃。

只有你所要求的内存才能确保实际你的才能使用。您请求的内存块可能是有效的,但是由其他内容使用(例如stdio库缓冲区)或保留供将来使用(例如,您调用的下一个malloc)。