关于动态内存分配malloc的初级用法和注意事项
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
/*your code*/
int *m_p = NULL;
/*
C语言中m_p里面是随机值,在int *m_p=NULL,这个m_p是有值的,为NULL;
int *m_p=NULL指向一个空指针,等于 int *m_p=0; NULL等于0;
可以随时让这个m_p指向其他地址。定义指针,将它初始化为NULL,这样做编程更规范。
*/
//malloc中指针本身存储是系统自动分配 存在栈区 而指针指向的内容是存在堆区
m_p = (int*)malloc(sizeof(int));
*m_p = 1000;
printf("*m_p = %d\n",*m_p);
printf("m_p = %p\n",m_p);
free(m_p); //m_p指向的空间的值释放 可以看成*m_p=NULL
//free()释放的是指针指向的空间内存,不是指针 是把*p的值变为空
printf("*m_p = %d\n",*m_p);
printf("m_p = %p\n",m_p);
m_p = NULL;
//指针这个变量的值还存在 所以要 p=NULL 让指针也为空
//不free() 直接p=NULL 这样显示空间的值(%d,*p)会产生段错误 而p的地址%p依然显示NULL
//printf("*m_p = %d\n",*m_p);
//printf("m_p = %p\n",m_p);
//只free(m_p) 不m_p=NULL 则*p还能被赋值
//int a = 4000;m_p = &a;
//*m_p = 3000;
//printf("*m_p = %d\n",*m_p);
//printf("m_p = %p\n",m_p);
return 0;
}
/*
动态内存分配malloc的初级用法和注意事项
所以free()函数释放的是指针指向的空间内存,将原本我们赋予的值清空,指针作为一个变量,
只有到程序结束时才会被销毁,原来指向这块空间的指针p仍然存在,如果有其他指针q指向了该内存空间,
就可能误用指针p来修改这里的值,因此用完free§之后,我们要将p = NULL,赋于给空指针,
这样就能保证之后程序运行中不会发生错误!
所谓释放,就相当于告诉操作系统,"这块空间我不再使用了,你可以分给别人了"。
注意:
程序员手动分配的空间的首地址,一定要保留下来,
否则如果有指针偏移操作时,首地址就找不到了,就没法释放了。
操作系统不会主动回收我们手动分配的内存。
如果手动申请的内存空间,没有释放,这种现象就叫做内存泄漏。
内存泄漏一般指的是的服务器程序(常驻后台运行)!!
对于我们自己写的、简单的、运行一下就结束的程序,不会发生内存泄漏,
因为进程结束时,操作系统会回收进程占用的所有资源。
*/
关于动态内存分配malloc的初级用法和注意事项相关推荐
- c语言malloc引用类型作参数,c语言中动态内存分配malloc只在堆中分配一片内存.doc...
c语言中动态内存分配malloc只在堆中分配一片内存 .C语言中动态内存分配(malloc)只在堆中分配一片内存,返回一个void指针(分配失败则返回0),并没有创建一个对象.使用时需要强制转换成恰当 ...
- C语言学习笔记10-指针(动态内存分配malloc/calloc、realloc、释放free,可变数组实现;Tips:返回指针的函数使用本地变量有风险!;最后:函数指针)
C语言:指针 1. 指针:保存地址的变量 *p (pointer) ,这种变量的值是内存的地址. 取地址符& 只用于获取变量(有地址的东西)的地址:scanf函数-取地址符 地址的大小 ...
- linux c free大段内存,Linux C 动态内存分配--malloc,new,free及相关内容
一.malloc()和free()的基本概念以及基本用法: 1.函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针 ...
- C和指针之动态内存分配malloc、calloc、realloc简单使用和区别
1.介绍 3个函数都在<stdlib.h>头文件 1).void* malloc(unsigned size); 在内存的动态存储区中分配一块长度为size字节的连续区域,参数size为需 ...
- 动态内存分配(malloc)详解
文章目录 malloc free ( ) calloc( ) 动态内存分配与变长数组 内存类与动态内存分配 malloc malloc()找到可用内存中一个大小适合的块. 内存是匿名的: 也就是说,m ...
- C中的malloc:C中的动态内存分配
什么是C中的malloc()? (What is malloc() in C?) malloc() is a library function that allows C to allocate me ...
- malloc动态内存分配
运用动态内存分配可以有效解决定义的数组或者结构体大小不够用的情况,动态内存分配就是人为的向系统申请一个指定大小的空间用来存放临时数据.在c语言中,一些可控或者说是一些小数据下,可以人为定义一些变量用来 ...
- 动态内存分配(malloc函数)
动态内存分配 原型 extern void*malloc(unsigned int num_bytes); 头文件 #include<stdlib.h> 功能 分配长度为num_bytes ...
- linux 在指定区域分配内存 c语言,C语言动态内存分配:(一)malloc/free的实现及malloc实际分配/释放的内存...
一.malloc/free概述 malloc是在C语言中用于在程序运行时在堆中进行动态内存分配的库函数.free是进行内存释放的库函数. 1.函数原型 #include void *malloc( s ...
最新文章
- 网络拓扑手工绘制不可或缺
- iOS9基础知识(OC)笔记
- SQL Server 2008 R2 系统配置检查器的检查参数和妨碍性问题的解决办法
- sdutoj 2624 Contest Print Server
- MySql语句查询优化
- Attribute “singleton” must be declared for element type “bean”.
- robotac属于a类还是b类_所得税A类和B类的区别,什么样的属于B类??
- KK集团完成门店系统一期上云
- Charles安卓8手机抓包
- js实现全国省份下拉
- 顺丰该不该开除删库的运维工程师?
- 简易计算机电路,适合新手使用的5款超简单电路图制作软件
- docker中安装nacos报错 com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: io exception
- CUPS学习五:打印机基础
- 墙裂推荐一个高质量的数据分析学习平台
- 基于opencv-python的车道线检测(高级)
- audio的自动播放
- cad lisp 两侧偏移并删除_cad lisp 两侧偏移并删除_知道这些技巧-轻松攻克CAD所有困难...
- HTML中如何给代码添加注释
- maven 排除配置文件打包_maven 打包排除配置文件