关于malloc的问题

来源:百度知道 编辑:UC知道 时间:2024/05/24 07:47:39
int * p;
p=(int *)malloc(100);
p[161]=900; //只分配了一百个空间 为什么能够赋值
p[162]=900; //就会运行错误

下标只要超过99,就已经越界了,再赋值就已经改写不属于自己的数据了,程序运行是否出现异常,取决于改写了什么数据。

指针是不会检查它的有效性的,在这里你自己申请的100个空间是不会出错的,其他的它不会去保证.

编译,链接和运行错误,那都是小KISS,就怕象你这样的,突然能运行,突然

又会出错误,想这种情况,一定要把它定格为错误.

其实编译软件和C语言是不会检查地址越界问题的 这点要特别主意 一不小心就会出错p=(int *)malloc(100); 这一句p只得到了一个申请空间的首地址,
p[161]=900;这一句可以看做*(p+161)=900也就是说给地址为p+161的存储空间赋值。但是你无法知道这个存储区到底是干什么的。或许他没什么用知识空的,因此可以赋值不会出错 ;如果这个地址是系统不允许访问的区域,你就会出错 就像p[162]=900; //就会运行错误
这就像 你在自己家撒泡尿没人会说你 但是你要是跑到别人厨房里面去方便那就不允许了。。。粗俗! 自己BS自己