iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言malloc分配问题详解
  • 666
分享到

C语言malloc分配问题详解

2024-04-02 19:04:59 666人浏览 独家记忆
摘要

目录前言一、malloc是什么?1.1malloc定义1.2malloc函数含义二、malloc的使用2.1添加头文件2.2malloc和free2.3malloc使用注意三、mal

前言

空间分配要点有:一是空间分配的连续性;二是动态内存申请;三是防止程序执行中出现异常错误。

提示:开始讲解了嗷~后续会根据精力持续更新嗷!!记得关注收藏点赞嘿嘿!蟹蟹

一、malloc是什么?

1.1malloc定义


void *malloc(size_t a)

1.a为内存块的大小,以字节为单位

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

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

4.void *,表示未确定类型的指针。C,c++规定,void *类型可以强转为任何其他类型的的指针。( 其他任意类型变量都可以直接赋值给它,无需进行强转,但是反过来不可以。)

1.2malloc函数含义

malloc 函数其实就是在内存中:找一片指定大小的空间,然后将这个空间的首地址给一个指针变量,这里的指针变量可以是一个单独的指针,也可以是一个数组的首地址, 这要看malloc函数中参数size的具体内容。我们这里malloc分配的内存空间在逻辑上是连续的,而在物理上可以不连续。

例如,对传入的一个图像进行解释、识别,那么首先要做的,是将此文件数据装入内存中(malloc),执行完成后,立即释放(free)。这就需要malloc及free了。

对于超过1000字节的数组空间,建议用malloc/free,以确保数组变量的绝对正确;小的空间,直接用数组定义即可。

二、malloc的使用

2.1添加头文件

##1.添加头文件使用malloc函数一般要添加头文件:#include <malloc.h>或者#include <alloc.h>;

你也可以选择自己定义实现malloc函数也可以。详细可以看下列参考文章【1】malloc 函数详解

2.2malloc和free

一旦你使用了malloc,就一定要对它进行free。

如果申请后不释放就是内存泄露;

如果无故释放那就是什么都没有做;

释放只能释放一次,如果释放两次及两次以上会出现错误(但是释放空指针例外,释放空指针其实也等于什么都没有做,所以,释放多少次都是可以的)。

2.3malloc使用注意


int *a =NULL;
a = (int *)malloc(8);

这种malloc方式,只是意思是分配8字节的空间,但是这种在访问数组a[8] = 2时候会产生指针越界,因为它其实访问的是a+8*sizeof(int)。

所以下列malloc方式更好:


int *a =NULL;
a = (int *)malloc(8*sizeof(int));

三、malloc内存分配失败

3.1指针越界

定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内存。

1.结构体成员指针未初始化

2.没有为结构体指针分配足够的内存

3.函数的入口处做指针校验

3.2为指针分配的内存太小

为指针分配了内存,但是内存大小不够,导致出现越界错误。

3.3内存分配成功,但并未初始化

犯这个错误往往是由于没有初始化的概念或者是以为内存分配好之后其值自然为0。定义一个变量时,第一件事就是初始化。你可以把它初始化为一个有效的值。

3.4内存越界

内存分配成功,且已经初始化,但是操作越过了内存的边界。可能使用了memset、memcpy等函数进行了越界访问,也有可能是以指针或数组的形式进行了越界访问,导致malloc函数返回0。

这种错误经常是由于操作数组或指针时出现“多1”或“少1”。所以,for循环的循环变量一定要使用半开半闭的区间,而且如果不是特殊情况,循环变量尽量从0开始。

四、参考文章

【1】malloc 函数详解

【2】C语言中malloc申请的空间和直接定义变量申请的空间有什么区别?

【3】malloc内存分配失败

【3】malloc函数申请内存失败

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: C语言malloc分配问题详解

本文链接: https://www.lsjlt.com/news/136153.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言malloc分配问题详解
    目录前言一、malloc是什么?1.1malloc定义1.2malloc函数含义二、malloc的使用2.1添加头文件2.2malloc和free2.3malloc使用注意三、mal...
    99+
    2024-04-02
  • C语言malloc与calloc区别详解
    目录区别用法malloc用法calloc用法区别 开门见山,malloc与calloc在内存分配时,前者分配一整块,后者分配n块,并且后者在分配时会将内存置为0,前者不会内存里是垃圾...
    99+
    2023-01-13
    C语言 malloc calloc C语言 malloc C语言 calloc
  • 详解C语言在STM32中的内存分配问题
    01、前言 不说废话,先上示例代码 uint8_t num_byte[4]; uint32_t num_word; const uint32_t num_word_const =...
    99+
    2024-04-02
  • C语言中动态内存分配malloc、calloc和realloc函数解析
    目录前言free函数malloc函数calloc函数realloc函数扩充malloc/calloc/realloc区别总结总结前言 有时候我们需要的空间大小不确定,需要随着程序需要...
    99+
    2024-04-02
  • C语言解决堆栈括号匹配问题示例详解
    目录首先构建栈调用匹配函数代码调用1.括号匹配问题就是当遇到{( [这些左括号的时 将括号字符入栈 2.当遇到右括号时判断栈顶元素是不是与左括号匹配如果匹配就出栈 如果不匹配就直接结...
    99+
    2024-04-02
  • C语言实现24点问题详解
    目录题目描述问题分析代码实现运行结果题目描述 在屏幕上输入1〜10范围内的4个整数(可以有重复),对它们进行加、减、乘、除四则运算后(可以任意的加括号限定计算的优先级),寻找计算结果...
    99+
    2024-04-02
  • 详解C语言动态内存的分配
    目录C 程序中,不同数据在内存中分配说明内存动态分配的相关函数应用实例动态分配内存的基本原则总结C 程序中,不同数据在内存中分配说明 1)全局变量——内存中的...
    99+
    2024-04-02
  • C语言内存的动态分配比较malloc和realloc的区别
    C—动态内存分配之malloc与realloc的区别 在程序的执行期间分配内存时,内存区域中的这个空间称为堆(heap)。还有另一个内存区域,称为栈(stack),其中的空间分配给函...
    99+
    2024-04-02
  • C语言main()函数的参数问题详解
    #include<stdio.h> void main(int argc, char* argv[]) { while (argc > 1) { ++a...
    99+
    2024-04-02
  • C语言数学问题与简单DP01背包问题详解
    目录数学买不到的数目蚂蚁感冒饮料换购简单DP01背包问题二维一维数学 顾名思义,数学类的题就是都可以用数学知识求解。 买不到的数目 这是第四届蓝桥杯省赛C++A组,第四届蓝桥杯省赛J...
    99+
    2024-04-02
  • C语言 动态分配数组案例详解
    目录一维动态数组的创建:二维数组的创建:很多人在编写C语言代码的时候很少使用动态数组,不管什么情况下通通使用静态数组的方法来解决,在当初学习C语言的时候我就是一个典型的例子,但是现在...
    99+
    2024-04-02
  • C语言中的盗贼(小偷)问题详解
    问题描述:警察审问4名窃贼嫌疑犯。现在已知,这4人当中仅有一名是窃贼,还知道这4个人中的每个人要么是诚实的,要么总是说谎。 这4个人给警察的回答如下。 甲说:“乙没有偷,...
    99+
    2024-04-02
  • C语言堆结构处理TopK问题详解
    目录问题分析代码实现问题 在一百万个数据中,求出最大的k个数字,怎么效率高。 1. 将一百万个数据排序,承接上一篇的堆排序,时间复杂度为O(N * LogN)。但是显然这并不是最优解...
    99+
    2024-04-02
  • 如何分析C语言在STM32中的内存分配问题
    今天就跟大家聊聊有关如何分析C语言在STM32中的内存分配问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。01、前言不说废话,先上示例代码uint8_t num_byte...
    99+
    2023-06-22
  • C语言 分支语句详解分析
    目录分支语句的分类1、单分支结构语法形式:2、双分支结构3、多分支结构注意事项分支语句的分类 在不同的场景,我们常常面临着选择,有时候会在爱情与面包之间选择,有时候会在尊严与生存之间...
    99+
    2024-04-02
  • C语言动态内存泄露常见问题内存分配改进方法详解
    目录一、例题二、2种改进方法法1:二级指针(传址调用)法2:返回指针总结一、例题 试问该段代码能打印什么,或者不能打印什么,说出理由 #define _CRT_SECURE_NO...
    99+
    2024-04-02
  • C语言动态内存管理malloc柔性数组示例详解
    目录1.C语言动态内存管理库函数介绍1.1为什么存在动态内存管理1.2动态内存管理函数1.2.1malloc1.2.2free1.2.3calloc1.2.4realloc1.3动态...
    99+
    2022-11-13
    C语言动态内存malloc柔性数组 C语言 malloc柔性数组
  • C语言动态内存的分配实例详解
    目录前言动态内存分配的定义动态内存的优势<1>  可以控制内存的大小<2> 可以多次利用这部分空间<3>不占用栈区的内存malloc c...
    99+
    2024-04-02
  • C语言动态规划之背包问题详解
    01背包问题        给定n种物品,和一个容量为C的背包,物品i的重量是w[i],其价值为v[i]。问如何选择装入背包的物品,使得装入背...
    99+
    2024-04-02
  • C语言计算分段函数问题
    目录C语言计算分段函数简单分段函数用多路分支与if else 级联的写法一、简单分段函数二、代码三、代码及运行结果C语言计算分段函数 修改后的代码如下: #include<st...
    99+
    2022-11-16
    C语言计算分段函数 计算分段函数 C语言分段函数
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作