首页 > 其他分享 >malloc 函数的用法

malloc 函数的用法

时间:2023-08-27 11:34:04浏览次数:27  
标签:malloc 函数 int void 用法 类型 new sizeof


函数声明(函数原型):

void *malloc(int size);

说明:malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。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得到指针,在其它操作上保持一致。

注意:malloc 函数返回的是系统分配的内存的首地址。

标签:malloc,函数,int,void,用法,类型,new,sizeof
From: https://blog.51cto.com/u_5173797/7252053

相关文章

  • 【MySQL 8.0】新特性:函数索引
    (root@node01)>selectcount(*)fromcustomerwhereyear(c_since)=2020;+----------+|count(*)|+----------+|702|+----------+1rowinset(0.46sec)(root@node01)>explainselectcount(*)fromcustomerwhereyear(c_since)=2020;+----+-......
  • policy机制中经典的python用法
    由于接触python时间还不长,属于边用边学,在看项目代码的时候,遇到了很多不太懂的python语法,但是我认为这些用法用的实在是好,希望以后自己在写程序时,也能写出这么经典的代码,在这里记录下来这些:1.将函数名作为参数传递给另一个模块中的函数使用:definit():......#read_cached......
  • ORACLE递归用法
     ......
  • AcWing 873. 欧拉函数
    题目给定$n$个正整数$a_i$,请你求出每个数的欧拉函数。欧拉函数的定义$1∼N$中与$N$互质的数的个数被称为欧拉函数,记为$\varphi(N)$。若在算数基本定理中,$N={p_1}^{a_1}{p_2}^{a_2}...{p_m}^{a_m}$,则:$\varphi(n)=m(1-1/p_1)(1-1/p_2)...(1-1/p_k)$输入格式第......
  • 动态内存函数
    1.为什么存在动态内存分配?我们已经掌握的内存开辟方式有:int val=20;//在栈空间上开辟四个字节char arr[10]={0};//在栈空间上开局但是上述的开辟空间的方式有两个特点1.空间开辟大小是固定的。2.数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配。但是对于空间的需......
  • 流程函数
      ......
  • Python多进程用法
    Python的多进程用法主要是通过`multiprocessing`模块实现的。以下是一个简单的示例: 1.首先,导入`multiprocessing`模块。2.定义一个要在多个进程中运行的函数。3.使用`multiprocessing.Process`类创建多个进程对象。4.调用进程对象的`start()`方法启动进程。5.使用`joi......
  • MySQL.js用法
    mysql.js是一个用于连接MySQL数据库的JavaScript库。以下是一些常用的方法及其详细参数说明: 1.创建连接对象: ```javascriptconstmysql=require('mysql');constconnection=mysql.createConnection({ host:'localhost',//数据库地址 user:'root',//数据......
  • Redis.js用法
    Redis.js是一个用于连接和操作Redis数据库的JavaScript库。以下是一些常用的方法及其详细参数说明: 1.创建Redis客户端实例: ```javascriptconstredis=require('redis');constclient=redis.createClient({ host:'localhost',//Redis服务器地址 port:6379,......
  • [安乐椅#18] 三角函数技巧
    特殊角三角函数值\(\sin{\dfrac{\pi}{12}}=\dfrac{\sqrt{6}-\sqrt{2}}{4}\)\(\sin{\dfrac{\pi}{8}}=\dfrac{\sqrt{2-\sqrt{2}}}{2}\)\(\sin{\dfrac{\pi}{6}}=\dfrac{1}{2}\)\(\sin{\dfrac{\pi}{4}}=\dfrac{\sqrt{2}}{2}\)\(\sin{\dfrac{\pi}{3}......