动态内存空间的开辟与释放

在不知道需要占用内存空间大小时,需要在堆栈上动态开辟内存空间,空间使用结束后需要程序员自己释放。
#include <stdio.h>
#include <stdlib.h>
void main()
{
	int n,*p,i,j,m,temp;
	printf("本程序可对任意个整数排序;\n");
	printf("请输入整数的总个数: ");
	scanf("%d",&n);
	p=(int *)calloc(n,sizeof(int));  //运行时决定内存分配大小
	if(p==0)
	{
		printf("分配失败!\n");
		exit(1);
	}
	else
	{
		for(i=0;i<n;i++)
		{
			scanf("%d",&p[i]);
		}
		for(j=0;j<n-1;j++)
			for(m=j+1;m<n;m++)
			{
				if(p[j]>p[m])
				{
				temp=p[j];
				p[j]=p[m];
				p[m]=temp;
				}
			}
	}
	for(m=0;m<n;m++)
	 printf("%d ",p[m]);
	int a=p[3];
	printf("\n%x",p);
	free(p);
	printf("\n%x",p);
	printf("\n%d",a);
	p=NULL;
	printf("\n%x\n",p);
	return;
}

时间: 2024-10-30 10:16:48

动态内存空间的开辟与释放的相关文章

C与C++申请动态内存空间的异同

C与C++申请动态内存空间的异同 C语言与C++的关系,我们可以这样来形容,C++继承于C语言,却两者都有各自独特的特性,比如在如何申请动态内存空间上有显著的差别. 首先我们要知道,为什么需要动态申请内存空间? 与动态分配相对应的是静态分配,在计算机中,内存分为栈区和堆区,其中栈区的空间相对于堆区会小很多,可以理解为,自己的家和仓库. 静态分配是在栈区提前分配一个固定大小的空间,而动态分配是需要多少分配多少,需要注意的是,动态分配需要程序员维护内存. 说了大致的分别,现在我们来看C语言和C++动

关于构建二维动态内存(堆)及释放

分配一维的内存堆可以直接用malloc及free,关于二维有如下方法: a=(int**)malloc(sizeof(int*)*m); for(i=0;i<m;i++) a[i]=(int*)malloc(sizeof(int)*n); 释放时用: for(i=0;i<m;i++) free(a[i]); free(a); 如

c++中的动态内存管理

c++中的动态内存管理问题 c++中使用new和delete实现动态内存管理.new和delete实现动态管理对象,new[]和delete[]实现动态管理对象数组.c++中的new和delete运算符均使用我们c中学过的malloc和delete函数实现动态内存的开辟. 首先,先简单介绍下c中的几个动态内存函数malloc,realloc,calloc,free; void *malloc(size_t size); //动态内存开辟函数 void free(void *pointer);  

《C++primer(第五版)》学习之路-第十二章:动态内存

[ 声明:版权所有,转载请标明出处,请勿用于商业用途.  联系信箱:[email protected]] 12.1 动态内存与智能指针 1.在C++中,动态内存的管理是通过一对运算符来完成:new,在动态内存中为对象分配空间并返回一个指向该对象的指针,我们可以选择对对象进行初始化:delete,接受一个动态对象的指针,销毁该对象,并释放与之关联的内存. 2. shared_ptr允许多个指针指向同一个对象:unique_ptr则"独占"所指向的对象.标准库还定义了一个名为weak_pt

动态内存管理---new&amp;delete

动态内存管理 动态对象(堆对象)是程序在运行过程中在动态内存中用new运算符创建的对象. 由于是用户自己用new运算符创建的,因此也要求用户自己用delete运算符释放,即用户必须自己管理动态内存. 计算机内存数据区常有三种分区,即静态数据区.堆区.桟区. 1.程序在编译时就为静态变量和静态对象分配了静态数据存储区.在静态数据区中存储的变量或对象在该程序的整个运行期间都存在, 它们的生命周期贯穿整个程序的运行周期.比如全局变量.static(静态)变量等都是存储在静态数据区. 2.调用函数时,函

常见动态内存错误---内存泄漏

常见动态内存错误 编译器不能自动发现动态内存错误,动态内存错误通常只能在程序运行时才能被捕捉到,而且错误原因不容易查找,错误本身也不容易捕捉,改错难度较大. 1.动态内存分配失败却继续操作 内存不足等有可能导致动态内存分配失败,所以使用new请求分配动态内存后一定要检查返回地址是否为NULL. 如用if(p==NULL) 或 if(p!=NULL)进行检查,未检查前不要操作动态内存空间. 2.动态内存空间未初始化就进行读操作 C++标准并未规定动态内存空间的默认值,程序无法预知该默认值的具体指.

【足迹C++primer】39、动态内存与智能指针(2)

动态内存与智能指针(2) 直接管理内存 void fun1() { //此new表达式在自由空间构造一个int型对象,并返回指向该对象的指针 int *pi1=new int; //pi指向一个动态分配.未初始化的无名对象 string *ps3=new string; //初始化为空string int *pi2=new int; //pi指向一个未初始化的int int *pi3=new int(1024); //pi指向的对象的值为1024 string *ps4=new string(1

动态内存管理---new&amp;amp;delete

动态内存管理 动态对象(堆对象)是程序在执行过程中在动态内存中用new运算符创建的对象. 因为是用户自己用new运算符创建的.因此也要求用户自己用delete运算符释放,即用户必须自己管理动态内存. 计算机内存数据区常有三种分区.即静态数据区.堆区.桟区. 1.程序在编译时就为静态变量和静态对象分配了静态数据存储区.在静态数据区中存储的变量或对象在该程序的整个执行期间都存在. 它们的生命周期贯穿整个程序的执行周期.比方全局变量.static(静态)变量等都是存储在静态数据区. 2.调用函数时.函

c++动态内存管理

一.内存的常见分配方式 1. 从静态区分配,一般是全局变量和static类型变量 2.从栈区分配内存,一般是局部的变量,会随着所在函数的结束而自动释放 3.从堆中分配,一般是使用手动分配,使用malloc()函数和new来申请任意大小空间,不过要手动释放空间,相应的使用free()函数和delete释放, 如果不释放该空间,而且指向该空间的指针指向了别的空间.则该空间就无法释放,造成内存泄露,造成了内存浪费 二.内存的使用规则 1.在使用malloc()或new申请空间时,要检查有没有分配空间成