当前位置: 首页 > news >正文

13-指针和动态内存-内存泄漏

一、视频笔记:

C语言通过malloc,来获取堆上的内存。

动态调用内存: malloc 和 free ;new 和 delete 都行。

内存泄漏指的是我们动态申请了内存,但是即是是使用完了之后(从来都不去释放它)。只会由不正确的动态内存(堆)的使用引起。

每个函数调用都对应一个栈帧。

任何未使用和未引用的堆上内存都是垃圾。

JAVA 和C+上,堆上的垃圾会被自动回收。

内存泄漏是不当的使用动态内存或内存的堆区,在一段时间内持续增长。

总是因为中,未使用或未引用的内存块才会发生。栈上的会自动回收,栈的大小固定,最多会栈溢出。

函数调用结束的时候,它的所有的局部变量都会被清除。

栈区:静态或全局变量——没有在函数内部声明,生命周期是整个程序的执行期间。一个区段是用来存放函数调用和局部变量的。

代码区、全局区、栈区是固定的在编译期间就决定了。

第四个区段称为堆或动态内存区:不是固定的,堆可以动态按需生长。

Srand(time(NULL));根据时间变化给出随机值。

二、测试代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h> // 包含字符串处理函数库
#include <math.h>
#include <time.h>int cash = 100;
void Play(int bet) {char* C = (char*)malloc(10000 * sizeof(char));C[0] = 'J'; C[1] = 'Q'; C[2] = 'K';printf("Shuffling...\n");srand(time(NULL));int i;for (i = 0; i < 5; i++){int x = rand() % 3;int y = rand() % 3;int temp = C[x];C[x] = C[y];C[y] = temp;}int playersGuess;printf("What't the position of queen - 1,2 or 3?");scanf_s("%d", &playersGuess);if (C[playersGuess - 1] == 'Q') {cash += 3 * bet;printf("You Win ! Result = \"%c %c %c\" Total Cash = $% d\n", C[0], C[1], C[2], cash);}else {cash -= bet;printf("You Loose ! Result = \"%c %c %c\" Total Cash = $% d\n", C[0], C[1], C[2], cash);}free(C);
}int main()
{int bet;printf("**Welcome to the Virtual Casion**\n\n");printf("Total cash = $%d\n", cash);while (cash > 0) {printf("What's your bet? $");scanf_s("%d", &bet);if (bet == 0 || bet > cash) break;Play(bet);printf("\n**********************\n");}
}
http://www.lryc.cn/news/452351.html

相关文章:

  • 基于深度学习的视频摘要生成
  • 适合初学者的[JAVA]: 基础面试题
  • internal.KaptWithoutKotlincTask$KaptExecutionWorkAction 问题 ---Room数据库
  • Frequency-aware Feature Fusion for Dense Image Prediction 论文阅读
  • Springboot + netty + rabbitmq + myBatis
  • 电磁兼容(EMC):整改案例(四)人体对EFT测试影响有多大?
  • 数据可视化基础:让数据说话
  • 有哪些优化数据库性能的方法?如何定位慢查询?数据库性能优化全攻略:从慢查询定位到高效提升
  • C语言 | Leetcode C语言题解之第450题删除二叉搜索树中的节点
  • 智慧防灾,科技先行:EasyCVR平台助力地质灾害视频监测系统建设
  • 掌握C#核心概念:类、继承、泛型等
  • [VULFOCUS刷题]tomcat-pass-getshell 弱口令
  • golang rpc
  • A Learning-Based Approach to Static Program Slicing —— 论文笔记
  • 掌握 C# 中的委托与事件机制
  • 使用微服务Spring Cloud集成Kafka实现异步通信(消费者)
  • docker pull 超时Timeout失败的解决办法
  • YOLOv7改进之主干DAMOYOLO结构,结合 CReToNeXt 结构,打造高性能检测器
  • 进度条(倒计时)Linux
  • [每周一更]-(第117期):硬盘分区表类型:MBR和GPT区别
  • 河南移动:核心营业系统稳定运行超300天,数据库分布式升级实践|OceanBase案例
  • 22.1 k8s不同role级别的服务发现
  • OpenCV计算机视觉库
  • CentOS 系统中的文件挂载 U 盘
  • Lumerical脚本语言-变量操作(Manipulating variables)
  • 一个基本的包括爬虫、数据存储和前端展示框架0
  • 简历制作面试篇
  • 智能制造--EAP设备自动化程序
  • LabVIEW混合控制器质量检测
  • 新技术浪潮下的等保测评:云计算、物联网与大数据的挑战与机遇