动态分配

2024-01-30 17:58
文章标签 动态分配

本文主要是介绍动态分配,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

所有的变量使用到这一点,在本教程中有一个共同点:该变量必须先声明在编译的时候。 这导致了两个问题:第一,很难有条件地声明一个变量,把它在一个if语句块之外(在这种情况下,它会超出范围时,块的结束)。 第二,所有数组的大小必须决定在运行程序之前。 例如 以下 是不合法的
cout << "How many variables do you want? ";
int nVars;
cin >> nVars;int anArray[nVars]; // wrong!  The size of the array must be a constant

然而,在许多情况下,它会有用能的大小或调整阵列并正在运行的程序。例如,我们可能需要使用一个字符串,牵着别人的名字,但我们不知道多久,他们的名字是直到他们进入它。我们可能要在数的记录从磁盘读取,但我们事先不知道有多少记录。或者我们可以创建一个游戏,一个怪物追逐的球员数量可变的。

如果我们不得不宣布一切大小在编译的时候,我们所能做的就是尽力猜测的最大数量的变量,我们需要和希望的,足够的:

char szName[25]; // let's hope their name is less than 25 chars!
Record asRecordArray[500]; // let's hope there are less than 500 records!
Monster asMonsterArray[20]; // 20 monsters maximum

他是一个贫穷的解决方案有以下几个原因。首先,它会导致浪费内存如果变量实际上并没有用。例如,如果我们分配25个字符每名称,但名称平均只有12个字符长,我们分配在两次,我们真正需要的!第二,它可以导致人为的限制和/或缓冲区溢出。当用户试图在600个记录从磁盘读取?因为我们只分配了500的空间,我们可以给用户一个错误,只看前500条记录,或(在最坏的情况下,我们根本没有处理这种情况),我们的记录,我们的程序缓冲区溢出崩溃。

幸运的是,这些问题是容易解决的问题,通过动态内存分配。动态内存分配允许我们将任何大小的记忆在我们需要的时候我们需要它。

单变量的动态分配

分配一个单变量的动态,我们使用标量(非数组)的新的算子形式:


这篇关于动态分配的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/661075

相关文章

深入理解Jvm--Java静态分配和动态分配完全解析

jvm中分配Dispatch的概念 分派是针对方法而言的,指的是方法确定的过程,通常发生在方法调用的过程中。分派根据方法选择的发生时机可以分为静态分派和动态分派,其中对于动态分派,根据宗量种数又可以分为单分派和多分派。实际上指的是方法的接收者和属性的所有者的类型确定(determine by atual type or determine by static type)。根据类型确定发生在运行期

动态分配内存(为什么要动态分配内…

在计算机的系统中有四个内存区域: 1)栈:在栈里面储存一些我们定义的局部变量以及形参(形式参数);2)字符常量区:主要是储存一些字符常量,比如:char *p_str=”cgat”;其中”cgat”就储存在字符常量区里面;3)全局区:在全局区里储存一些全局变量和静态变量;4)堆:堆主要是通过动态分配的储存空间。     动态分配的变量时储存在堆里面,但是这个堆的空间并不是无限大的,也许当我们编一

【转】c语言中内存的动态分配与释放(多维动态数组构建)

一. 静态数组与动态数组 静态数组比较常见,数组长度预先定义好,在整个程序中,一旦给定大小后就无法再改变长度,静态数组自己自动负责释放占用的内存。 动态数组长度可以随程序的需要而重新指定大小。动态数组由内存分配函数(malloc)从堆(heap)上分配存储空间,只有当程序执行了分配函数后,才为其分配内存,同时由程序员自己负责释放分配的内存(free)。 二. 为什么要使用动态数组? 在实际的编程

C与C++动态分配二维数组

C: C中使用函数malloc和free两个函数. //动态分配M*N维int **a=(int **)malloc(sizeof(int*)*M);for(int i=0;i<M;i++)a[i]=(int *)malloc(sizeof(int)*N);//动态释放for(int j=0;j<M;j++)free(a[i]);free[a]; C++: C++

顺序表的顺序表示—动态分配

顺序表的顺序表示—动态分配 代码实现 #include <stdio.h>#include <stdlib.h>#define InitSize 15 // 初始化扩容长度typedef struct{int *data; // 动态分配数组的指针int MaxSize;int length; // 当前长度}SeqList;void InitList(SeqList &L){// 申请

C语言两种动态分配二维数组方式的讨论

在c语言中,常常有这种情况,需要动态分配一个根据实际需求情况的不确定大小的二维数组。在这种情况下,常常以存放元素数据类型为字符串的一维数组(即存放元素数据 类型为字符类型的二维数组)。例如存放10个学生的名字,一般可以简单定义这样一个二维数组char nameArray[10][30]。但是如果学生的个数不确定,再采用这种类型的声明,声明一个固定大小的二维数组,这种情况下需要定义一个足

c/c++ 多维数组的动态分配

我们知道在c或者c++里面,基本数组的定义必须是常数才可以。动态分配内存没法直接了当。 在c++ 里可以vector来动态分配, 例如: vector<vector<int>> dp(n + 1, vector<int>(W + 1)); 但是更基本的做法是指针来new, 一维数组: 1 int *array1D;2 //假定数组长度为m3 //动态分配空间4 array

C语言中的内存分配方式(静态分配、动态分配)定义以及区别

在C语言中,内存分配主要有两种方式:静态分配(Static Allocation)和动态分配(Dynamic Allocation)。这两种方式在程序运行时对内存的管理和使用有着不同的特点和用途。 1. 静态分配(Static Allocation) 静态分配是在程序编译时就已经确定内存大小和位置的分配方式。这种分配方式主要用于全局变量、静态变量(包括在函数内部定义的静态局部变量)以及常量。

关于内存的动态分配

在C语言中,内存的动态分配是使用malloc和free来开辟和释放内存资源,而在C++中,出了可以利用和C语言中同样的malloc和free之外,还可以使用new和delete关键字来开辟和释放内存。需要注意的是,malloc和free,new和delete需要配对使用。 malloc是一个函数,原型为extern void *malloc(unsigned int num_bytes); 例如

Linux系统/dev/mapper目录浅谈(讲得很好,逻辑卷的方式就是动态分配硬盘空间了)

Linux系统/dev/mapper目录浅谈 2015年03月08日 16:32:05 阅读数:23959     Linux系统的一般的文件系统名称类似于/dev/sda1或/dev/hda1,但是今天在进行系统维护的时候,利用df -h 命令敲出了/dev/mapper/VolGroup-lv_root和/dev/mapper/Volume-lv_home两个文件系