首页 > 系统相关 >动态内存分配(malloc,free)1

动态内存分配(malloc,free)1

时间:2023-09-17 18:32:14浏览次数:34  
标签:10 malloc int free 动态内存 空间 include 开辟

动态内存分配(malloc,free)1_空指针

动态内存分配(malloc,free)1_空指针_02

动态内存分配(malloc,free)1_数组_03

使用动态内存开辟函数,可以创捷长度可变的数组大小,这样可以减少空间的浪费。

动态内存分配(malloc,free)1_#include_04

动态内存分配(malloc,free)1_数组_05

在创建可变长度的数组时,其实在C99标准下,是可以直接创建的,例如linux下gcc编译器可以通过编译命令gcc test.c -std=c99,来实现。

动态内存分配(malloc,free)1_数组_06

在vs下是不支持的,所以需要通过内存开辟函数来进行创建。

动态内存分配(malloc,free)1_数组_07

在开辟空间的时候,有可能会开辟失败,所以需要检查malloc的返回值是否为空指针,如果为空则开辟失败,同时也可以使用全局函数strerror来返回错误码,检查是什么错误。

动态内存分配(malloc,free)1_#include_08

动态内存分配(malloc,free)1_数组_09

创建完之后,使用完要通过free函数将此空间释放,但是释放完之后,p还是指向原来的空间。所以要再把p赋成空指针。防止可以通过p再此访问此空间造成破坏。

下图是整个开辟空间和归还空间的流程图,即使不归还空间,在整个程序运行完之后,该空间也会被归还给系统。

动态内存分配(malloc,free)1_数组_10

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

int main()
{
	int* p = (int*)malloc(10 * sizeof(int));
	if (p == NULL)
	{
		printf("%s\n", strerror(errno));
	}
	else
	{
		int i = 0;
		for (i = 0; i < 10; i++)
		{
			*(p + i) = i;
		}
		for (i = 0; i < 10; i++)
		{
			printf("%d ", *(p + i));
		}
	}
	free(p);
	p = NULL;
	return 0;
}


标签:10,malloc,int,free,动态内存,空间,include,开辟
From: https://blog.51cto.com/u_15906483/7503521

相关文章

  • C语言实例_实现malloc与free函数完成内存管理
    一、malloc和free函数介绍在C语言中,malloc和free是用于动态内存管理的函数。(1)malloc函数malloc函数用于在堆(heap)中分配指定大小的内存空间,并返回一个指向该内存块的指针。原型如下:void*malloc(size_tsize);size参数表示要分配的内存块的大小,以字节为单位。函数返回一个指向分配内......
  • jfreechart中文无法显示的问题
    jfreechart是一个开源免费的Java图表工具。一个简单的入门例子:packageplot;importorg.jfree.chart.ChartFactory;importorg.jfree.chart.ChartFrame;importorg.jfree.chart.JFreeChart;importorg.jfree.chart.plot.PlotOrientation;importorg.jfree.data.category.Def......
  • freeswitch 编译安装问题汇总
    要编译,却没有configure文件,这是需要生成configure文件。按以下顺序执行命令即可生成configure文件。1.aclocal2.autoconf3.autoheader4.automake--add-missing5../configure6.make7.makeinstall项目https://github.com/kamalmostafa/minimodem就是这样的一个......
  • 视图模板____Freemarker入门demo
    //工程结构//代码类packagecom.freemarker.test;importjava.io.File;importjava.io.FileWriter;importjava.io.PrintWriter;importjava.util.HashMap;importjava.util.Map;importfreemarker.template.Configuration;importfreemarker.temp......
  • freertos的任务切换
    FreeRTOS任务调度的原理是什么?FreeRTOS的任务调度是在中断上下文中实现的!!!!!!主函数:在裸机系统中,系统的主体就是main函数里面顺序执行的无限循环,这个无限循环里面CPU按照顺序完成各种事情。在多任务系统中,我们根据功能的不同,把整个系统分割成一个个独立的且无法返回的函......
  • 滑模控制:消颤(chattering-free)的一种方式
    滑模控制中控制器出现抖颤的原因基本是控制器中存在sign项,其在0处间断且不可导。如图,抖振并不是连续不可导的折线,其实是滑膜切换面上下的离散点, 常用消颤的方式是将sign项替换为sign项的积分。这是由于积分自身的平滑作用......
  • Adobe Camera Raw 15.5最新版download for free支持最新相机
    AdobeCameraRaw中文版是一款Adobe增效工具滤镜,AdobeCameraRaw插件采用强大的图像处理技术,可以导入增强数字负片(DNG)格式的原始文件及编辑RAW文件,并提供最新型号相机和镜头配置文件支持.新版变化支持AdobeCameraRaw增效工具的CreativeCloud应用程序包括:AdobeBridge、P......
  • freeswitch 在visualstudio 2017 中编译运行
    1、visualstudio使用2017版本的2、下载 https://github.com/PerkinsZhu/freeswitch/tree/v1.8 源码   错误处理:一、 下载地址:https://wixtoolset.gallerycdn.vsassets.io/extensions/wixtoolset/wixtoolsetvisualstudio2017extension/1.0.0.22/1668223938167/......
  • Virtualbox中FreeBSD安装lxqt桌面后鼠标无响应
    1程序版本及问题Virtualbox7.0FreeBSD13.1xorg7.7_3lxqt1.3.0virtualbox-ose-additions6.1.46问题:通过startx启动lxqt桌面后鼠标无响应。2问题解决步骤打开/etc/X11/xorg.conf文件1定位到ServerLayout新增一行Option"AutoAddDevices""false"如下:Section"S......
  • Proj CDeepFuzz Paper Reading: Aries: Efficient Testing of Deep Neural Networks v
    Abstract背景:thedefactostandardtoassessthequalityofDNNsintheindustryistochecktheirperformance(accuracy)onacollectedsetoflabeledtestdatatestselectioncansavelaborandthenbeusedtoassessthemodel前提:themodelshouldhav......