开卡系统:malloc函数开辟的空间是否为 (n+1)*sizeof(type)

来源:百度文库 编辑:神马品牌网 时间:2024/05/08 12:59:22
我用malloc函数开辟一段int空间
p=(int *)malloc(n*sizeof(int));
for(i=0;i<10;i++,p++)
printf("%d,%p",*p,p);
可以看到malloc开辟的空间,前5个为0,后面都是不可知的。
然后我对其进行付值,连续存放10个int值
最后打印,发现,其中有6个有效值。
然后将空间大小改了几次,发现 都比期望的大小多1*type的长度。
是否说明,malloc开辟的空间长度应该是 (n+1)*sizeof(type)

这个说法是有问题的
不能说你可以赋值可以正常读取就是“有效”
实际上当你的目标是一个未分配给你的错误地址的时候,假如在你读写之间系统没有对这个地址进行操作,那么你获得的当然是正确结果
可是你不能够保证系统不操作,因为系统并没有分配这个地址给你好比你偷偷闯入一户住宅,主人暂时不在家,你可以刷牙洗脸看电视吃东西就像主人一样,但是你不合法
假如系统能够自动判断,就不会有数组越界,指针失效等c语言的经典烦恼了事实上正因为c对于指针的近乎于暴力的直接操作,使得c系列成为了灵活的代名词

至于为什么每次都是多一个“有效”的值
我想可能是基于编译器的原因,在你分配的空间后面加了一个int的大小用作其他用途而暂时没有用刀,你可以试试看其他的编译器,或者用double等不同的类型试试看

我在VC里运行,n是多少,就有多少个值相同啊,应该就是楼主说的“有效”吧。