C++动态内存分配
•静态内存分配——分配固定大小内存
缺点:大多数情況下会浪费内存空间,少数情况下可能引起下标越界。
•动态内存分配——分配可变大小内存
优点:不需要预先分配存储空间,分配的空间可根据程序需要扩大或缩小。
一.C语言动态内存分配
♦ malloc函数:malloc(unsigned int size);
函数在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。
当函数未能成功分配存储空间(如内存不足)就会返回一个NULL指针。所以在调用该函数时应该检测返回值是否为NULL并执行相应的操作。
示例1:
void main()
{
int count,*array;
if((array = (int *) malloc(10*sizeof(int))) == NULL)
{
cout<<"不能成功分配存储空间"<<endl;
exit(1);
}
for (count=0;count<10;count++)
array[count]=count;
for(count=0;count<10;count++)
cout<<array[count]<<endl;
return;
}♦ free函数:void free(void *p);
函数功能是释放指针p所指向的内存区。其参数p必须是先前调用malloc函数时返回的指针。如果给free函数传递其它的值很可能造成死机或其它灾难性的后果。
示例2:
void main()
{
int count,*array;
if((array = (int *) malloc(10*sizeof(int))) == NULL)
{
cout<<"不能成功分配存储空间"<<endl;
exit(1);
}
for (count=0;count<10;count++)
array[count]=count;
for(count=0;count<10;count++)
cout<<array[count]<<endl;
free(array);//释放内存
return;
}二.C++动态内存分配
♦ 操作符new
返回一个指向内存块开始位置的指针。
示例3:
int n=5;
int *p1; //一级指针->指向一位数组
int (*p2)[10]; //二级指针->指向二位数组
int (*p3)[10][20];//三级指针->指向三位数组
p1=new int[n];
p2=new int[5][10];
p3=new int[5][10][20]; 动态内存分配通常由操作系统控制,在多任务的环境中,它可以被多个应用共享,因此内存有可能被用光。如果这种情况发生,操作系统将不能在遇到操作符new
时分配所需的内存,一个无效指针(null pointer)将被返回。因此,在使用new之后总是检查返回的指针是否为空(NULL)。
示例4:
bobby =new int[5];
if (bobby==NULL)
{
;//error assigning memory.Take measures.
}
♦ 操作符delete
既然动态分配的内存只是在程序运行的某一具体阶段才有用,那么一旦它不再被需要时就应该被释放,以便给后面的内存申请使用。
delete操作符可以释放内存空间:delete [ ] pointer;
示例5:
void main()
{
int n=5;
int *p1; //一级指针->指向一位数组
int (*p2)[10]; //二级指针->指向二位数组
int (*p3)[10][20];//三级指针->指向三位数组
p1=new int[n];
p2=new int[5][10];
p3=new int[5][10][20];
delete []p1;
delete []p2;
delete []p3;
int *bobby;
bobby =new int[5];
if (bobby==NULL)
{
;//error assigning memory.Take measures.
}
delete []bobby;
return;
}
本文介绍了C++中的动态内存分配,包括静态内存分配的缺点和动态内存分配的优势。详细讲解了C语言中的malloc函数,C++中的new操作符以及如何使用free和delete释放内存。示例代码展示了动态内存分配与释放的过程。
1396

被折叠的 条评论
为什么被折叠?



