请问VC和malloc的问题

请教高手
定义 u32 mybuf , *p_mybuf;
然后
main()
{
mybuf = (u32 *)malloc(8);//请问,这时申请的是8个字节,还是8*4=32个字节?
p_mybuf = &mybuf[0]; //请问,没有定义mybuf数组,为什么可以直接用而不报错?
mybuf[33] =0x9; // 请问,33已经超过malloc申请的 范围了,会有什么现象?
}

谢谢!
谢谢!

1、8字节。malloc申请的内存是void指针类型的,所以在申请后,前面要强制转换为所需要的类型,如你的例子中的(u32*),所以malloc(8)申请的是8字节的。
2、第二句是不会报错的。因为你第一句已经为mybuf申请了内存,mybuf已经是一个含有8个字节的u32*指针类型了。指针跟数组的运用基本上是一样的,但在有些地方不一样。如参数时有时会不一样。
3、这里已经超出了数组界限。按照内存的访问机制,mybuf[33]会继续访问内存外的第33处的空间,如果该空间已经被使用了,程序就会崩溃的。如果没有被使用的话,你就会很幸运的没有崩溃而出现了乱码。。。。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-02
1. malloc 中的参数的含义是分配的字节数
2. mybuf[0] 中 []的作用相当于 * ,解引用,也就是 =*(mybuf+1)
3.mybuf[33] 指向不确定的内存,所以后果不确定,可能正确,也可能崩了!
第2个回答  2012-02-29
1: 是8字节
2:mybuf定义成数组或指针,用法上很相似的。 这里语法上是没有问题的
3:难以预料,幸运的话程序会崩溃掉。不幸的话,程序会正常运行。
相似回答