C语言中动态内存分配的malloc函数

c语言中的malloc函数

C语言中的malloc函数

需要包含头文件:

#i nclude

立即学习“C语言免费学习笔记(深入)”;

#i nclude

立即学习“C语言免费学习笔记(深入)”;

函数声明(函数原型):

void *malloc(int size);

malloc函数用于向系统申请分配指定大小的内存空间,返回类型为void*。在C和C++中,void*类型的指针可以强制转换为任何其他类型的指针。

从函数声明上可以看出,malloc 和 new 至少有两个不同之处:new 返回指定类型的指针,并且可以自动计算所需的大小。例如:

int *p;

p = new int; //返回类型为int* 类型(整数型指针),分配大小为 sizeof(int);

或:

int* parr;

parr = new int [100]; //返回类型为 int* 类型(整数型指针),分配大小为 sizeof(int) * 100;

而 malloc 则必须由我们计算要字节数,并且在返回后强行转换为实际类型的指针。

int* p;

p = (int *) malloc (sizeof(int));

第一、malloc 函数返回的是 void * 类型,如果你写成:p = malloc (sizeof(int)); 则程序无法通过编译,报错:“不能将 void* 赋值给 int * 类型变量”。所以必须通过 (int *) 来将强制转换。

第二、函数的实参为 sizeof(int) ,用于指明一个整型数据需要的大小。如果你写成:

int* p = (int *) malloc (1);

代码也能通过编译,但事实上只分配了1个字节大小的内存空间,当你往里头存入一个整数,就会有3个字节无家可归,而直接“住进邻居家”!造成的结果是后面的内存中原有数据内容全部被清空。

malloc 也可以达到 new [] 的效果,申请出一段连续的内存,方法无非是指定你所需要内存大小。

比如想分配100个int类型的空间:

int* p = (int *) malloc ( sizeof(int) * 100 ); //分配可以放得下100个整数的内存空间。

另外有一点不能直接看出的区别是,malloc 只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的。

除了分配及最后释放的方法不一样以外,通过malloc或new得到指针,在其它操作上保持一致。

C语言malloc函数的问题我在下面函数两次用malloc给 p共6个单位内存

展开全部

你分两次分配内存,前一次3个int,可惜你把它丢失了,第二次分配了三个还用这个指针,你没给新内存头三个int赋值,直接越界写了界外的3个int单元,程序没有立即崩溃已经是很侥幸了

int *p, *p1,i;

p = (int *)malloc(3*sizeof(int));

for(i=0;i

printf(" int put:");

scanf("%d",p+i);

}

p1 = (int *)malloc(3*sizeof(int));

for(i=0; i

printf(" int put:");

scanf("%d",p1+i);

}

for(i=0;i

for(i=0;i

超简单的malloc函数问题

这个可以看一下malloc函数的原型

void* malloc(int)

malloc的参数是一个整形,表示要申请的内存数,以字节为单位,返回值是指向那段内存的一个指针,是空类型的指针。

而sizeof是一个运算符,通过他能得到一个类型或者变量的占内存的字节数,结果为整形。所以pp=(float *)malloc(sizeof(float));实际上先计算sizeof(float),得到一个float型占内存的字节数,32位环境下应该是4字节,结果就为4,然后malloc(4)申请了一个4字节的内存空间,并返回这块内存区域的地址,然后强制转化为float*类型。

关于链表是每一个链表的元素保存了下一个或上一个元素的地址,自然每一个链表元素都要占内存空间的,当要新加入一个链表的元素时首先要为这个元素分配地址,不然数据没有地方保存。

以上就是C语言中动态内存分配的malloc函数的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2530378.html

(0)
上一篇 2025年3月5日 20:35:52
下一篇 2025年2月22日 02:53:49

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 调整罗技驱动设置为中文界面

    在使用罗技驱动时,用户可能会遇到界面显示为英文或繁体字的情况,这可能会给用户的使用带来一些不便。为了解决这个问题,用户需要进入设置,将语言设置为自己能够理解的语言。这样就可以更方便地使用罗技驱动了。 罗技驱动界面怎么调中文: 1、首先打开罗…

    2025年3月5日 互联网
    200
  • 如何在中国版的 Microsoft Visual C 2010 学习版中编译 C 语言程序?

    Microsoft Visual C 2010学习版中文版如何编译C语言程序 文件->新建->项目 在打开的新建项目对话框中最左侧一栏中选择Visual C++下面的CLR,之后在其右侧的区域中选择CLR Empty Appli…

    2025年3月5日
    200
  • 鼠标右键菜单消失了,无法点击

    在桌面上点击鼠标右键菜单没了 REGEDIT4 ;功能:还原桌面,我的电脑里面的右键菜单 ;注意:重启或者注销后生效 [HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPolic…

    2025年3月5日
    200
  • 为什么无法更新系统的坚果手机?

    坚果手机为什么系统无法更新 因为你的系统版本低于2.5.8,解决方法详情见下图,放大查看: 名称由来: 锤子科技已确认将于8月25日在上海举行新品发布会。据泄露的加密视频文件显示,该款新机型号为Smartisan U1,但正式名称尚未确定。…

    2025年3月5日
    200
  • 请教高手:汽车EPC灯点亮的原因是什么?

    汽车EPC灯发亮是何原因请高手解答 造成电子节气门EPC灯发亮的原因有以下几个: 发动机ECU检测到进气系统泄漏,点亮EPC警告灯。导致EPC灯亮的实际原因并非电子油门控制系统本身功能问题。 使用解码仪读取故障代码,如果发现故障代码1755…

    2025年3月5日
    200
  • 使用jQuery取消单选框的选中状态

    jquery清除单选选中状态 关掉窗口时:$("input[type=’radio’]").removeAttr(‘checked’)。 Jquery 常用方法 1. 关于页面元素的引用。 可…

    2025年3月5日
    200
  • 无法安装罗技驱动程序

    罗技驱动能帮助用户调节外设,但有些用户可能会遇到无法安装的问题。此时,可以尝试删除之前的原文件,然后重新下载安装。 罗技驱动无法安装: 1、首先按下“Shift+Ctrl+Esc”打开“任务管理器”,把罗技程序全部结束。 2、打开“C:Pr…

    2025年3月5日 互联网
    200
  • 如何在笔记本上创建WiFi热点

    笔记本如何设置wifi热点 笔记本设置wifi热点有两种方法: 可以通过使用猎豹WiFi、360WiFi等WiFi发射软件,将电脑的无线网卡作为热点发送WiFi信号,从而实现手机、iPad等电子产品的网络访问。 下载wifi共享软件(如猎豹…

    2025年3月5日
    200
  • 苹果笔记本电脑好用吗

    苹果笔记本电脑好用吗 我觉得苹果产品很方便轻巧,尤其是与iPad和iPhone的连接以及一键备份功能。虽然价格相对其他同配置电脑来说较高,但作为一个全套苹果设备用户,我觉得它们的性能和便利性是无可比拟的。 欧版Macbook 13.3 Ai…

    2025年3月5日
    200
  • 人力资源部所包含的业务数据有哪些?

    人力资源部业务数据包括哪些内容 人均劳效是一种衡量企业人力资源效能的指标,可以通过人均销售收入或百元人工成本增加值等指标来考核。这反映了人力资源部门在提高人力资源效益方面取得的成就,例如在编制压缩和技能培训等方面的努力。 2、招聘计划的完成…

    2025年3月5日
    200

发表回复

登录后才能评论