永发信息网

请教malloc(100)和malloc(sizeof(int)*100)的区别

答案:4  悬赏:20  手机版
解决时间 2021-03-30 05:03
  • 提问者网友:蓝莓格格巫
  • 2021-03-30 01:09
请教malloc(100)和malloc(sizeof(int)*100)的区别
最佳答案
  • 五星知识达人网友:空山清雨
  • 2021-03-30 02:42
malloc(100)是开辟了100个byte。一个int是32位,4个byte。你malloc(100)相当于只能装25个int。
---------------------
回答补充问题:
1、你p[500]=3也可以。但是因为你前面只开辟了100个byte,所以在超出的空间上进行的赋值操作其实是不安全的,因为系统认为100个byte之外的区域都是未被使用的,如果在其他地方还有malloc的操作的话,有可能将你非法使用的区域分配出去干其它事儿。而且,这种写越界的事儿往往在大型的系统中引起不可预知的一些问题。一定要避免,切记切记。
全部回答
  • 1楼网友:时间的尘埃
  • 2021-03-30 05:12
p[99]是越界
你到达的内存区是谁开的是未知的
如果你p[99]=20
运气好没什么,可能那块内存本身就没程序用
运气差就有崩溃的可能
  • 2楼网友:第幾種人
  • 2021-03-30 04:53
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。
  • 3楼网友:愁杀梦里人
  • 2021-03-30 03:24
楼上说的不完全对。
首先对malloc函数理解有误,去看下函数的原型就会知道你错在哪里。
p=(int *)malloc(100)这样开辟的整型数据个数并不能确定是25个还是50个,因为在不同的系统中int所占的字节数不同。
p=(int *)malloc(sizeof(int)*100)这样开辟的数据一定是100个整型,因为SIZEOF函数可以将类型所占字节数求出来,这样不管是什么系统总是能开辟100个整型数据。
建议采用第二种做法,因为程序需要的是移植性,这样可以在不同系统上使用此程序。
希望回答对楼主有帮助。呵呵
补充回答:
完全是巧合,你机器系统int类型占8个字节也就是1个位,所以两种方式定义是等同的。呵呵。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯