请教malloc(100)和malloc(sizeof(int)*100)的区别
比如int*p1;p=(int*)malloc(100);这样开辟了一个整形数组可以存放100个整型,比如p[99]=10;我再输出是可以的。但是我看到一般的做法是p=(...
比如
int *p1;
p=(int *)malloc(100);
这样开辟了一个整形数组可以存放100个整型,比如p[99]=10;我再输出是可以的。
但是我看到一般的做法是
p=(int *)malloc(sizeof(int)*100);
那这样其实不就是开辟了一个整形数组可以存放400个整型数据了?,比如
p[300]=20;也是能够赋给的。
我本意是只要开辟一个存放100个整型数据的数组就够了,这样不就等于开辟了400个?何故我看到别人都是用第二种的呢????
我是在VC++ 6.0上做的,这个和编译环境有关系吗?
解答说malloc(100)只能装25个int,但是我经过测试用第一种方法p[99]也装进int了啊?这不就说明我用malloc(100)的方式可以装进100个整形??? 展开
int *p1;
p=(int *)malloc(100);
这样开辟了一个整形数组可以存放100个整型,比如p[99]=10;我再输出是可以的。
但是我看到一般的做法是
p=(int *)malloc(sizeof(int)*100);
那这样其实不就是开辟了一个整形数组可以存放400个整型数据了?,比如
p[300]=20;也是能够赋给的。
我本意是只要开辟一个存放100个整型数据的数组就够了,这样不就等于开辟了400个?何故我看到别人都是用第二种的呢????
我是在VC++ 6.0上做的,这个和编译环境有关系吗?
解答说malloc(100)只能装25个int,但是我经过测试用第一种方法p[99]也装进int了啊?这不就说明我用malloc(100)的方式可以装进100个整形??? 展开
5个回答
展开全部
malloc(100)是开辟了100个byte。一个int是32位,4个byte。你malloc(100)相当于只能装25个int。
---------------------
回答补充问题:
1、你p[500]=3也可以。但是因为你前面只开辟了100个byte,所以在超出的空间上进行的赋值操作其实是不安全的,因为系统认为100个byte之外的区域都是未被使用的,如果在其他地方还有malloc的操作的话,有可能将你非法使用的区域分配出去干其它事儿。而且,这种写越界的事儿往往在大型的系统中引起不可预知的一些问题。一定要避免,切记切记。
---------------------
回答补充问题:
1、你p[500]=3也可以。但是因为你前面只开辟了100个byte,所以在超出的空间上进行的赋值操作其实是不安全的,因为系统认为100个byte之外的区域都是未被使用的,如果在其他地方还有malloc的操作的话,有可能将你非法使用的区域分配出去干其它事儿。而且,这种写越界的事儿往往在大型的系统中引起不可预知的一些问题。一定要避免,切记切记。
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
单片机,即单片微控制器,也称为单片微型计算机,是将中央处理器(CPU)、存储器(ROM,RAM)、输入/输出接口和其他功能部件集成在一块 在一个小块的集成电路上,从而实现对整个电路或系统的数字式控制。单片机不是完成某一个逻辑功能的芯片,而是...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
sizeof(int),即int类型的所占用的字节,大部分系统是4
malloc(5*sizeof(int)),也就是malloc(20)了
建议采用malloc(5*sizeof(int))这种形式,为什么呢?
因为不同环境可能给某种数据类型分配的内存是不一样的
如int
有的系统为32位
4个字节
有的为16位
2个字节
写成n*sizeof(int)这种形式就保证不会错了。
malloc(5*sizeof(int)),也就是malloc(20)了
建议采用malloc(5*sizeof(int))这种形式,为什么呢?
因为不同环境可能给某种数据类型分配的内存是不一样的
如int
有的系统为32位
4个字节
有的为16位
2个字节
写成n*sizeof(int)这种形式就保证不会错了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
malloc(100)是开辟了100个byte。一个int是32位即4个byte,sizeof(int)=4。所以malloc(sizeof(int)*100)=malloc(4*100)=malloc(400)。你说这两个区别大不大呢。既然是存放100个整型,应用malloc(sizeof(int)*100)。
也可以说跟编译环境有关,如果你的机子是32位的,那么一个整型就占4个byte,如果你的机子是64位的,那么一个整型就要占8个byte。
也可以说跟编译环境有关,如果你的机子是32位的,那么一个整型就占4个byte,如果你的机子是64位的,那么一个整型就要占8个byte。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
p[99]是越界
你到达的内存区是谁开的是未知的
如果你p[99]=20
运气好没什么,可能那块内存本身就没程序用
运气差就有崩溃的可能
你到达的内存区是谁开的是未知的
如果你p[99]=20
运气好没什么,可能那块内存本身就没程序用
运气差就有崩溃的可能
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上说的不完全对。
首先对malloc函数理解有误,去看下函数的原型就会知道你错在哪里。
p=(int *)malloc(100)这样开辟的整型数据个数并不能确定是25个还是50个,因为在不同的系统中int所占的字节数不同。
p=(int *)malloc(sizeof(int)*100)这样开辟的数据一定是100个整型,因为SIZEOF函数可以将类型所占字节数求出来,这样不管是什么系统总是能开辟100个整型数据。
建议采用第二种做法,因为程序需要的是移植性,这样可以在不同系统上使用此程序。
希望回答对楼主有帮助。呵呵
补充回答:
完全是巧合,你机器系统int类型占8个字节也就是1个位,所以两种方式定义是等同的。呵呵。
首先对malloc函数理解有误,去看下函数的原型就会知道你错在哪里。
p=(int *)malloc(100)这样开辟的整型数据个数并不能确定是25个还是50个,因为在不同的系统中int所占的字节数不同。
p=(int *)malloc(sizeof(int)*100)这样开辟的数据一定是100个整型,因为SIZEOF函数可以将类型所占字节数求出来,这样不管是什么系统总是能开辟100个整型数据。
建议采用第二种做法,因为程序需要的是移植性,这样可以在不同系统上使用此程序。
希望回答对楼主有帮助。呵呵
补充回答:
完全是巧合,你机器系统int类型占8个字节也就是1个位,所以两种方式定义是等同的。呵呵。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询