- 主题:请教一下malloc和_msize函数
如下一段程序:
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
int main()
{
int *p1;
int *p2;
int i;
p1=(int*)malloc(40);
int b=13;
for(i=0;i<b;i++)
{
p1[i]=i;
printf("%d\n",p1[i]);
}
int a;
a=_msize(p1);
printf("%d\n",a);
}
有两个不懂的地方请教一下:
(1)开辟的是40个字节的空间,为什么程序允许b可以大于20也不报错?
(2)当b<=12时,a是40,当b>=13时,a是72,这是为什么呢?
求指点,谢谢
--
FROM 124.126.201.*
申请了40字节的长度,最多可以存20个短整型的数啊
【 在 z16166 的大作中提到: 】
:
: 第一个问题是不是问错了?分配的40字节,当然允许访问20字节啊。你要问的是不是访问40字节以上?
:
: OS内存的分配和释放实际是按page操作的,程序的CRT函数malloc()所分配的heap block如果处于某个page的中间,或者后面还有一个能读取的page,那么可以读取超过40字节的内容而不崩溃,但已经属于越界了。MSVC调试器里面看一下对应的内存就知道了,debug -> windows -> memory。
:
--
FROM 1.202.122.*
是我基本知识错了,刚查了一下,int可能占用2个字节(短整)或4个字节(长整),那它什么情况下占2什么时候占4呢?
【 在 flw @ [CProgramming] 的大作中提到: 】
:
: 学习 C 语言要记住一句话:
:
: C 只能保证正确的程序可以得到正确的结果,
: 而无法保证错误的程序一定会得到错误的结果。
--
FROM 219.142.154.*
收到,谢谢专家答疑
【 在 poggy 的大作中提到: 】
: 有两个不懂的地方请教一下:
: (1)开辟的是40个字节的空间,为什么程序允许b可以大于20也不报错?
: (2)当b<=12时,a是40,当b>=13时,a是72,这是为什么呢?
: ...................
--
FROM 111.193.227.*