#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等,为什么它不会抛出错误?
答案 0 :(得分:5)
Malloc以系统页面大小的块(通常为4096字节)分配堆空间,但它仅为您的使用保留,与您请求的完全一致。如果您在malloc
内存之外写作,则可能会因违反分段而损坏您的堆或导致程序崩溃。
只有你所要求的内存才能确保实际你的才能使用。您请求的内存块可能是有效的,但是由其他内容使用(例如stdio
库缓冲区)或保留供将来使用(例如,您调用的下一个malloc
)。