动态分配的内存释放之后指针要置空

C语言动态内存管理 malloc。 阅读详情
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

void main2()
{
	int num;
	scanf("%d", &num);
	printf("%d\n", num);

	int *p = (int *)malloc(sizeof(int)*num);
	if (p == NULL)
	{
		printf("内存分配失败\n");
	}
	else
	{
		for (int i = 0; i < num; i++)
		{
			p[i] = i;
			printf("%d\n", p[i]);
		}

		printf("%p\n", p);
		free(p);
		
		printf("%p\n", p);				//内存释放前后,指针的值不变

		p = NULL;						//内存释放以后,要将指针置空(NULL),符合软件工程规范	
		printf("%d\n", p[2]);			//内存置空,在程序测试时可以及时发现引用错误
		
	}

	system("pause");
}

webapi .net core8.0配置使用Token权限认证 本人在网上找了很多版本,不是太复杂就是不行。 阅读详情

相关推荐

LEF 5.8 Language Reference学习笔记

您可以在一个 LEF 文件中定义所有元件库信息,但这样会产生一个复杂且难以管理的大文件。相反,您可以将信息分为两个文件,一个是 "technology "LEF 文件,另一个是 "cell library "LEF 文件。

yajuan的专栏 4101

编程规范简述【内存、指针、字符串等】

目录 1 内存管理 规范1:【内存使用必须遵循谁申请谁释放原则】 规范2:【内存释放函数和该内存的申请函数必须配套使用】 规范3:【申请内存后必须要先判断内存有效性】 规范4:【内存拷贝前必须进行长度有效性判断,避免内存越界】 规范5:【禁止引用已经释放的内存空间】 2指针管理 规范6:【指针使用前必须进行有效性判定,避免使用空指针】 规范7:【指针内存释放后,对应指针必须置空】 规范8:【释放结构体/数组/各类数据容器指针前,必须先释放成员指针】 3变量、宏 规范9:【严禁使用..

马小超 1420

Python气象数据处理实战:用PyCINRAD轻松绘制雷达PPI图像(附避坑指南)

本文详细介绍了如何使用Python库PyCINRAD处理中国CINRAD系列天气雷达的基数据,并绘制专业的PPI图像。内容涵盖从环境配置、数据读取、核心绘图到高级定制与批量处理的完整流程,并针对安装依赖、中文乱码、数据范围等常见问题提供了实用的避坑指南,帮助气象工作者高效完成雷达数据可视化。

dog123的博客 222

【C语言】动态内存管理

分享了动态内存管理的相关知识(包括动态内存开辟函数,常见的动态内存错误等)

大米饭的记录册 636

保姆级避坑指南:在Ubuntu 18.04上搞定速腾Helios雷达驱动与fast-LIO2的完整配置流程

本文提供了一份详细的速腾Helios雷达与fast-LIO2在Ubuntu 18.04上的配置避坑指南,涵盖驱动安装、数据格式转换到建图全流程。特别针对常见编译错误和数据转换问题提供了解决方案,帮助开发者高效完成环境搭建与建图任务。

weixin_27252001的博客 113

Allegro规则管理器实战:5步搞定Xnet等长组设置(含Relative Propagation Delay配置)

本文详细介绍了在Cadence Allegro规则管理器中,通过5个实战步骤高效设置Xnet等长组的方法。核心内容包括创建Xnet属性、定义引脚对、建立匹配组,并重点讲解了Relative Propagation Delay规则的配置与应用,帮助PCB设计师确保高速信号时序对齐,提升系统稳定性与性能。

weixin_29193259的博客 518

c++ 指针的安全问题

delete ptr;// 避免悬挂指针int* ptr;// 未初始化的指针*ptr = 5;// 未定义行为,对野指针解引用i <= 10;i++) {// i = 10 时会导致缓冲区溢出// 调用函数,演示缓冲区溢出return 0;指针 ptr 指向的是栈上分配的变量 i 的地址,而不是通过 new 关键字分配的堆内存。尝试用 delete 释放栈上的变量是不允许的,这会导致程序运行出现未定义行为。int i = 42;// 错误:试图释放一个非动态分配的指针。

淘气の小狼人的博客 2079

基于STM32设计的水下水质检测装置(微信小程序)(205)

本项目设计了一款基于STM32微控制器为核心的水下水质检测设备,该设备具有高度集成化、智能化的特点,能够实时监测水深、温度、浊度及溶解性总固体(TDS)等关键水质参数,并通过4G网络将数据上传至腾讯云IOT物联网平台,实现远程监控和数据分析。同时,为了便于操作和移动观测,还配套开发了微信小程序,用户可通过微信小程序实时查看并控制设备的各项功能,如调整下潜深度等。

1252

指针作为函数参数 进行内存释放 并置NULL

author:张继飞 写在前面,前面写了代码封装free函数,但是调用封装并退出后,指针并不为NULL,导致接下来以此作为判断条件的时候就出现问题了。先前封装函数为void _free_p_(void *ptr),通过分析,指针作为函数参数传递时只是传递了指针所指向的地址,将其赋给一个临时变量,修改的也是该地址的的内容,但是指针本身并没有修改,置NULL也只是修改的临时变量。所以需要利用双重指针...

张继飞的专栏 1543

图神经网络实战(2)——图论基础

图论 (Graph theory) 是数学的一个基本分支,涉及对图研究。图是复杂数据结构的可视化表示,有助于理解不同实体之间的关系。图论提供了大量建模和分析现实问题的工具,如交通系统、社交网络和互联网等。在本节中,将介绍图论的基本原理,主要涉及三个方面:图属性、图概念和图算法。

盼小辉丶的博客 1万+

LVGL colorwheel组件教程一(调色板)

【代码】LVGL colorwheel组件教程一(调色板)

摸鱼专家 436

C语言之指针free后为什么还要刻意指向NULL

为指针变量动态分配一个空间,释放后为什么还可以给指针所指向的空间的那个变量赋值? int * p = (int *)malloc(4); *p = 4; printf("*p = %d\n", *p); free(p); *p = 5; printf("*p = %d\n", *p); 不是说释放后,*p应该没有权限读和写了吗,怎么还可以赋值成功,不赋值也可以读出一个垃圾值? 答:动态指针是在堆...

weixin_40286308的博客 5009

置顶必读(2) |《滚雪球学数学建模》专栏目录 & 历年国赛/美赛真题库 & 真题解析(持续更新中)

本专栏《滚雪球学数学建模》采用“从零开始、逐步滚雪球”的学习路径,把数学建模的基础理论、方法工具与大量实战真题(尤其是国赛题,涵盖2025-1992所有真题)有机融合,形成一套系统化训练路线。非常适合零基础入门、希望提升模型与工程化能力的本科/研究生,以及备战全国大学生数学建模竞赛(国赛/省赛)的同学。加油,我们一起把建模能力打造成可迁移的核心竞争力!

**My Coding Family** 26万+

3-24使用动态创建的数组

目标:赋值与获取响应元素的值 初始化赋值方式 int *array{1,2}; //等同与 //int array[10] = new int [10]{1,2}; array[2] = 40; array[3] = 50; 使用指针方式引用数组元素 //cout<<array[1]<<endl;//等同于 cout<<*(array+1)&l...

罗伊的博客 499

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C/C++ 指针删除的几个细节

在C/C++中,当指针需要删除时,对于new的指针,调用delete就可以删除  比如 : int* p = new int(17); delete p; 有时候为了避免使用错误,一般在delete之后,将p置为NULL,即: int* p = new int(17); delete p; p = NULL; 有时候为了方便及统一处理指针的申请及释放,一般放到将删除

玉宇逍遥 5491

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

浅谈指针使用中注意事项

相信大家对指针的用法已经很熟了,这里也不多说些定义性的东西了,只说一下指针使用中的注意事项吧。 一.在定义指针的时候注意连续声明多个指针时容易犯的错误,例如int * a,b;这种声明是声明了一个指向int类型变量的指针a和一个int型的变量b,这时候要清醒的记着,而不要混淆成是声明了两个int型指针。 二.要避免使用未初始化的指针。很多运行时错误都是由未初始化的指针导致的,而且这种错

shixiaoguo90的专栏 1094

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

非模态内存泄露

创建非模态对话框 if(m_pSaveAVIDlg_1 == NULL) { m_pSaveAVIDlg_1 = new CSaveAVIDlg(NULL,1); } 销毁对话框 if(m_pSaveAVIDlg_1 != NULL) { m_pSaveAVIDlg_1->DestroyWindow();   delete m_pSaveAVIDlg_1; m_pSa

willis 630

malloc用法

malloc用法三部曲:(#include<stdlib.h>下的库函数) 1.malloc eg.ps=(char*)malloc(sizeof(char)*20)的意思是,动态分配空间为20个char型数据大小的空间。并且将返回的指针类型强制转换成char型指针。 2.free eg.free(ps); 3.指针置空 ps=NULL; malloc在堆区开辟内存,因为...

weixin_34407348的博客 103

安全的指针FREE

#define FREE_SAFELY(X) { free(X); X=NULL; } 转载于:https://www.cnblogs.com/woodysu/archive/2010/05/27/1745326.html

weixin_30892889的博客 97

内存泄漏。。。

//内存泄露,分配在堆区的动态内存不会自己主动销毁,需要用delete,如果不回收,系统就会浪费很多的资源。 #include using namespace std; int main(){ float *pf = NULL; pf = new float; *pf = 4.321f; float f2= 5.321f; cout<<“pf指向的地址:”<<pf<<endl; cout<<"*pf的值:"<<*pf<<endl; pf

qq_40422174的博客 145

动态内存开辟经典笔试题

动态内存经典面试题*四

m0_71428048的博客 112

数据结构(malloc)2023.9.11

野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)2.指针释放后未置空,让人误以为是个合法的指针。2.定义两个字符指针,申请内存,进行字符串比较。不是空指针,是指向垃圾内存的指针。1.指针变量没有被初始化。

m0_72948049的博客 110

c的free和c++的delete的区别

文章转载自:http://blog.youkuaiyun.com/gukesdo/article/details/7506155 首先free对应的是malloc;delete对应的是new;free用来释放malloc出来动态内存,delete用来释放new出来的动态内存空间。 应用的区别为: 1. 数组的时候int *p=(int*)malloc(10*sizeof(int)) 释放的时候 free

大猪的博客 370

C语言进阶-动态内存管理/柔性数组

如果它在程序中一直没有使用,那么就会导致内存的白白占用(此时不是内存泄漏) 而如果它在程序中没有被free就被指向另一块地址了(或者该被被销毁),那么就会导致这块地址在这个进程中永远无法被找到(即内存泄露:无用的内存越来越大,操作系统得一直给这个进程分配内存) 所以要么主动free,要么只能等进程结束(自动释放内存,不建议)但有时候我们需要的空间大小在程序运行的时候才能知道, 那数组的编译时开辟空间的方式就不能满足了,由此动态内存开辟就来了。注:对非动态开辟的空间free是非法的。

2501_94114815的博客 386

c 里面的free和c++的delete的区别

首先free对应的是malloc;delete对应的是new;free用来释放malloc出来动态内存,delete用来释放new出来的动态内存空间。 应用的区别为: 1. 数组的时候int *p=(int*)malloc(10*sizeof(int)) 释放的时候 free(p)即可;这是因为编译器对malloc做了一些特殊的处理,以保证可以正确释放内存。而当int *p=new i

sjyttkl的专栏 546

C++动态分配内存知识点!

C++动态分配内存知识点喔~关注主播不迷路喔~

PingdiGuo_guo的博客 1万+
上一篇: 动态内存分配练习
下一篇: 内存泄露
KnowBug
博客等级 码龄9年 8粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值