C语言学习:malloc()函数

函数声明:

void *malloc(size_t size)

头文件:

#include <stdio.h>

函数描述:

  • 分配所需的内存空间,并返回一个指向它的指针。

参数:

  • size – 内存块的大小,以字节为单位。

返回值:

  • 该函数返回一个指针 ,指向已分配大小的内存。如果请求失败,则返回 NULL。

实例:

下面的实例演示了 malloc() 函数的用法。

#include <stdio.h>
#include <stdlib.h>void update_value(int* p){*p = 100;
}int main()
{//在栈上面分配变量a 占4个字节int a = 10;//申请类型是int内存空间;占4个字节;p指针指向该4个字节的内存空间        int *p = (int*)malloc(sizeof(int));//p变量也占4字节;所以sizeof(p)=8个字节//赋值p只指向的动态空间为50*p = 50;printf("p->value=%d &p=%p sizeof(*p)=%ld, sizeof(p)=%ld sizeof(a)=%ld \n", *p, p, sizeof(*p), sizeof(p),sizeof(a));free(p);//修改p指向的内存中的数据printf("p->value=%d &p=%p sizeof(*p)=%ld, sizeof(p)=%ld sizeof(a)=%ld \n", *p, p, sizeof(*p), sizeof(p),sizeof(a));update_value(p);printf("p->value=%d &p=%p sizeof(*p)=%ld, sizeof(p)=%ld sizeof(a)=%ld \n", *p, p, sizeof(*p), sizeof(p),sizeof(a));return(0);
}

注:当内存不再使用的时候,应使用free()函数将内存块释放掉。

void*:表示未确定类型的指针,C/C++规定void*可以强转为任何其他类型的指针,关于void还有一种说法就是其他任何类型都可以直接赋值给它,无需进行强转,但是反过来不可以。

malloc:分配的内存大小至少为参数所指定的字节数。

malloc的返回值是一个指针,指向一段可用内存的起始位置,指向一段可用内存的起始地址,多次调用malloc所分配的地址不能有重叠部分,除非某次malloc所分配的地址被释放掉malloc应该尽快完成内存分配并返回(不能使用NP-hard的内存分配算法)实现malloc时应同时实现内存大小调整和内存释放函数(realloc和free)

mallocfree是配对的,如果申请后不释放就是内存泄露,如果无故释放那就是什么也没做,释放只能释放一次,如果一块空间释放两次或者两次以上会出现错误(但是释放空指针例外,释放空指针也等于什么也没做,所以释放多少次都是可以的。)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446889.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 希尔排序

希尔排序(更高效的插入排序) 减少最小数在最后一位的情况下要循环的次数 思路: 把数组按增量(n/2)分组,对每一组使用插入排序去排序交换位置,然后不停地增量/2,直到其为1时,结束 分组:如n/25 891723 8与3为一组 从不包含本身的数开始数两种实现方法: 交换法(效率较低) 移动法…

使用gtest进行自己的单独测试的代码介绍

命令行 ./bin/hsm_device_apitest --gtest_filter"*aes_test" --device-type rpc --device-socket 192.168.1.108:5000 命令详解 进入工程文件&#xff0c;mkdir build&#xff0c;cd build在build的文件夹下面执行cmake命令和make命令之后&#xff0c;会在build文…

C语言学习:%d、2d、02d、.2d的区别

%d&#xff1a;为普通的输出。 %2d&#xff1a;按宽度为2输出&#xff0c;右对齐方式输出。若不够两位&#xff0c;左边补空格。 %02d&#xff1a;同样宽度为2&#xff0c;右对齐方式。位数不够&#xff0c;左边补0。 %.2d&#xff1a;从执行效果来看&#xff0c;与%02d一样…

计算机系统基础 数据的表示和存储

数制和编码 1.信息的二进制编码 2.进制转换必须要知道: 1)使用哪一个进制(二,八…) 2)定点数还是浮点数(关于小数点的问题) 3)编码问题----原码,补码,反码,移码 3.进制转换 1)R进制转十进制(按权展开) ----R进制 ----八进制与十六进制 ----R转换为十进制 2)十进制转换为R…

C++中vector章节iterator与const_iterator及const iterator区别

C目前倾向于使用迭代器遍历容器中的元素&#xff0c;而不是使用下标访问的方式来访问容器中的元素。可以使用iterator和const_iterator来访问元素&#xff0c;但是const类型的容器&#xff0c;那么只能用const_iterator来遍历。区别在于iterator可以改变元素的数值&#xff0c;…

Android查看当前应用已经加载的so库

源代码&#xff1a; private static List<String> allSOLists new ArrayList<String>();/** * 获取全部已加载的SO库*/private void getAllSOLoaded(){allSOLists.clear();// 当前应用的进程IDint pid Process.myPid();String path "/proc/" pid &q…

Android 进程监控(top命令)

文章目录一、查看top命令Android N&#xff08;7.1系统&#xff0c;level 25&#xff09; 及之前Android O&#xff08;8.0系统&#xff0c;level 26&#xff09; 及之后二、top -n [number]Android N&#xff08;7.1系统&#xff0c;level 25&#xff09; 及之前Android O&…

java 快速排序

快速排序 对冒泡排序的一种改进 思路: 一趟排序后,选取一个中间值,数组被分为比中间值小的部分,比中间值大的部分;再对左右两部分分别递归排序 代码实现 import java.util.Arrays;public class QuickSort {public static void main(String[] args) {int[] arr {-9, 78, 0, 2…

C++字符串的个人理解

String string是字符串&#xff0c;在声明一个字符串的时候&#xff0c;比如string a;这个过程是在栈上进行的&#xff0c;但是如果给这个字符串分配内存空间&#xff0c;这段区间是存储在堆上的&#xff0c;因此最好在声明字符串的时候就要指出字符串的大小和对其进行初始化s…

Android 基础性能数据获取(/proc/)

一、系统内存 读取命令&#xff1a; /proc/meminfoJava代码&#xff1a; private void click(){try{String cmd "/proc/meminfo";BufferedReader reader new BufferedReader(new InputStreamReader(new FileInputStream(cmd)), 1000);StringBuilder sb new Stri…

物理 常见力与牛顿三定律

常用知识点 动量 dmvdmvdvm p-mv- f-dp-/dtma- 开普勒第三定律 r1^3__k只与恒星质量有关 T^2 总结 1.电梯匀速就相当于在地面,加速或减速就会有一个a 2.当合外力为0时,物体保持静止或匀速直线运动 3.力是改变物体运动状态的原因 4.重力在地球两极最大,赤道最小,随纬度…

Java命令:jmap — 打印指定进程的共享对象内存映射或堆内存细节

文章目录一、前言二、命令介绍三、使用实例1、jmap -heap [pid]2、jmap -histo[:live] [pid]3、jmap -histo[:live] [pid] |grep "[关键字1]\|[关键字2]"4、jmap -dump:live,formatb,filea.log [pid]四、总结一、前言 jdk安装后会自带一些小工具&#xff0c;jmap命令…

C++vector相关学习,我的理解

vector的初始化方式 1&#xff0c;使用拷贝初始化时候&#xff0c;即使用的时候&#xff0c;只可以提供一个初始值2&#xff0c;如果提供一个类内初始值&#xff0c;只可以使用拷贝初始化或者使用花括号的方式初始化3&#xff0c;如果提供的是初始元素值的列表&#xff0c;只可…

概率论 一维随机变量

随机变量 离散型随机变量:有限个或无限可列个 连续型随机变量 分布函数F(X) 范围是[a,b) 包含能取到a以及a之前的值的概率相加 分布律(概率分布) 1.所有概率相加为1 2.WX-1,计算出每一个对应的W,然后如果有相同的W就合并其概率,最后一一对应P(x)即可 概率密度函数(密度) …

Linux命令:grep命令详解

grep常用参数说明 grep [OPTIONS] PATTERN [FILE...] grep [OPTIONS] [-e PATTERN]... [-f FILE]... [FILE...]OPTIONS:-e: 使用正则搜索-i: 不区分大小写-v: 查找不包含指定内容的行-w: 按单词搜索-c: 统计匹配到的次数-n: 显示行号-r: 逐层遍历目录查找-A: 显示匹配行及后…

ECC密钥结构和密码学基础

参考链接 密码学基础3&#xff1a;密钥文件格式完全解析ECC数据结构

JAVA牛客专项练习2020.12.31

1.使用迭代器的remove方法&#xff0c;可以边遍历边删除元素 2.线程 启动线程 new thread&#xff08;&#xff09;.start&#xff08;&#xff09; new thread&#xff08;new runnable&#xff08;&#xff09;&#xff09;.start&#xff08;&#xff09; 普通方法&#xf…

Linux命令:find命令详解

find命令格式 find path -option [-print] [-exec -ok |xargs |grep] [command {} \;]# 参数说明path: find命令所查找的目录路径。~ 表示$HOME目录;.来表示当前目录;/来表示系统根目录。-print: find命令将匹配的文件输出到标准输出。-exec: find命令对匹配的文件执行该参数所…

boost::interprocess::named_mutex的翻译和学习

官方地址 named_mutex 简介 // In header: <boost/interprocess/sync/named_mutex.hpp>class named_mutex { public:// construct/copy/destruct 构建/复制/销毁named_mutex(create_only_t, const char *, const permissions & permissions());named_mutex(open_o…

安卓牛客专项练习2020.12.31

1.窗口dialog或半透明 2.Pracelable性能比serializable高