#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等,为什么它不会抛出错误?
Malloc以系统页面大小的块(通常为4096字节)分配堆空间,但它仅保留供您使用,与您请求的完全一致.如果您的写入超出了您的malloc
内存,那么您可能会因为违反分段而破坏堆或使程序崩溃.
只有当你要求的内存保证是真正你使用.您请求的内存块可能是有效的,但是由其他东西使用(例如stdio
库缓冲区)或保留供将来使用(例如下次malloc
调用).