C++:动态内存管理

很久没写

之前有个笑话,是说:几个程序员去餐厅吃饭,那个会把盘子放回原地的一定是C/C++程序员,因为他们要自己清理内存.

好了,来上题目.

编写函数,返回一个动态分配的int的vector.将此vector传递给另一个函数,这个函数读取标准输入,将读入的值保存在vector元素中.再将vector传递给另一个函数.打印读入的值.记得在恰当的时候delete vector.

小心:动态内存管理容易出错

使用new和delete管理动态内存存在三个问题:

  1. 忘记delete内存,会导致内存泄漏,而且不容易发现.
  2. 使用已经释放掉的对象.有时可以检测出这种错误.
  3. 同一块内存释放两次.

相对于发现“罪证”,制造“罪证”显然容易多了。

C++.
image-2150

源代码


/*************************************************************************
> File Name: test.12.6.cpp
> Author: puruidong
> Mail: 1@w1520.com
> Created Time: 2014年07月25日
************************************************************************/

#include
#include
#include
using namespace std;

/************************************

编写函数,返回一个动态分配的int的vector.将此vector传递给另一个函数,这个函数读取标准输入,将读入的值保存在vector元素中.再将vector传递给另一个函数.打印读入的值.记得在恰当的时候delete vector.

*********************************************/

//输出vector中的内容,并释放内存
void outputvector(vector* vec)
{
cout << "\noutputvector\n" << endl; for(const auto &n:*vec) { cout << n << endl; } delete vec;//一定要释放内存. /* 下面这一行代码是为了避免"空悬指针"的出现而 添加的. 执行下面这一行代码之后,vec将不能再次使用. */ vec=nullptr; //报错.cout << vec->size() << endl; } //获取动态vector. vector* getve()
{
vector *vec=new vector;
return vec;
}

//接收标准输入.
void inputvector()
{
vector *vec=getve();
int pa ;
cout << "动态内存分配,请输入数字:" << endl; while(cin >> pa)
{
vec->push_back(pa);
}
outputvector(vec);
}

int main()
{
inputvector();
return 0;
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据