指针和自由存储空间复习(重点复习new和delete)
2017-05-29 16:59
288 查看
指针和自由存储空间复习(重点复习new和delete)
使用new来分配内存
在运行阶段分配未命名的内存以存储值为一个数据对象(可以是结构,也可以是基本类型)获得并指定分配内存的通用格式如下:
typeName * pointer_name = new typeName;
需要在两个地方指定数据类型:用来指定需要什么样的内存和用来声明合适的指针。
使用delete释放内存
一定要配对地使用new和delete使用delete时,后面要加上(最初是由new分配的)指向内存块的指针。
int* ps=new int; ... delete ps;
这将释放ps指向的内存,但不会删除指针ps本身。(可将ps重新指向另一个新分配的内存块)
使用new来创建动态数组
将数组的元素类型和
元素数目告诉new即可。
int* psome=new int [10];//创建一个包含10个int元素的数组
new运算符返回第一个元素的地址
当程序使用完new分配的内存块时,应使用delete释放它们。(如果使用new时不带方括号,使用delete时也不带方括号;如果使用new时带方括号,使用delete时也带方括号)
delete [] psome;
使用new和delete时,应遵循以下规则:
·不要使用delete来释放不是new分配的内存·不要使用delete释放同一个内存块两次
·如果使用new[]为数组分配内存,则应使用delete[]来释放
·如果使用new为一个实体分配内存,则应使用delete(没有方括号)来释放
·对空指针应用delete是安全的
使用动态数组
把指针当作数组名使用即可//arraynew.cpp #include <iostream> int main() { using namespace std; double* p3=new double [3]; p3[0]=0.2; p3[1]=0.5; p3[2]=0.8; cout<<"p3[1] is "<<p3[1]<<".\n"; p3=p3+1;//使p3指向第2个元素而非第1个元素 cout<<"now p3[0] is "<<p3[0]<<",p3[1] is "<<p3[1]<<".\n"; p3=p3-1; delete []p3; return 0; }
使用new创建动态结构
创建结构:
structName * pointer_name = new structName;
例如
inflatable * ps = new inflatable;
访问成员:
因为动态创建的结构没有名称,所以不能使用成员运算符句点.。
一种访问结构成员的方法是使用而箭头成员运算符
->。(
ps->price)
另一种访问结构成员的方法是
(*ps).price。
一个使用new和delete的示例
定义一个函数getname(),该函数返回一个指向输入字符串的指针。该函数将输入读入到一个大型的临时数组中,然后使用
new[]创建一个刚好能够存储该输入字符串的内存块,并返回一个指向该内存块的指针。
//delete.cpp #include <iostream> #include <string.h>//or csting using namespace std; char* getname(void);//function prototype int main() { char *name;//create pointer but no storage name=getname();//assign adress of string to name cout<<name<<" at "<<(int*)name<<"\n"; delete []name;//memory freed name=getname();//reuse freed memory cout<<name<<" at "<<(int*)name<<"\n"; delete []name; return 0; } char* getname() { char temp[100];//temporary storage cout<<"Enter name:"; cin>>temp; char* pn=new char[strlen(temp)+1]; strcpy(pn,temp);//copy string into smaller space return pn; }
注意该程序中将new和delete分开放在不同的函数中,此行为不推荐。
相关文章推荐
- C++文件头,命名空间,new和delete,内联函数,引用,函数重载,构造函数和析构函数,深拷贝和浅拷贝,explict,this指针
- C++自由存储空间:new
- new 出来的存储空间(如果不使用delete),系统会自动回收?
- 动态分配内存的自由存储区(堆)(用new和delete)
- 指针和自由存储空间(4)
- new、delete、指向连续空间的指针、数组、空间释放、空间申请[C++][内存管理]
- C++:指针和自由存储空间
- 第十五周 项目3:(2)用new和delete运算符进行动态分配的撤销存储空间
- 编写一个函数new,对n个字符开辟连续的存储空间,此函数应返回一个指针(地址),指向字符串开始的空间。new(n)表示分配n个字节的内存空间。
- 【c语言】编写一个函数new,对n个字符开辟连续的存储空间,此函数应返回一个指针(地址),指向字符串开始的空间
- 指针与自由存储空间
- Lesson 4:指针和自由存储空间
- C++学习笔记之八 复合类型---指针和自由存储空间
- C++笔记-指针和自由存储空间
- new、delete、指向连续空间的指针、数组、空间释放、空间申请
- new、delete、指向连续空间的指针、数组、空间释放、空间申请[C++][内存管理]
- 习题 8.19(1) 编写一个函数new,对n个字符开辟连续的存储空间,此函数应返回一个指针(地址),指向字符串开始的空间。new(n)表示分配n个字节的内存空间。
- c++学习之 指针和自由存储空间
- C++ 构造函数与析构函数详解(二)---自由存储 new和delete
- c++学习读书笔记-指针和自由存储空间