很久没写
之前有个笑话,是说:几个程序员去餐厅吃饭,那个会把盘子放回原地的一定是C/C++程序员,因为他们要自己清理内存.
好了,来上题目.
编写函数,返回一个动态分配的int的vector.将此vector传递给另一个函数,这个函数读取标准输入,将读入的值保存在vector元素中.再将vector传递给另一个函数.打印读入的值.记得在恰当的时候delete vector.
小心:动态内存管理容易出错
使用new和delete管理动态内存存在三个问题:
- 忘记delete内存,会导致内存泄漏,而且不容易发现.
- 使用已经释放掉的对象.有时可以检测出这种错误.
- 同一块内存释放两次.
相对于发现“罪证”,制造“罪证”显然容易多了。
源代码
/*************************************************************************
> 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
{
cout << "\noutputvector\n" << endl;
for(const auto &n:*vec)
{
cout << n << endl;
}
delete vec;//一定要释放内存.
/*
下面这一行代码是为了避免"空悬指针"的出现而
添加的.
执行下面这一行代码之后,vec将不能再次使用.
*/
vec=nullptr;
//报错.cout << vec->size() << endl;
} //获取动态vector.
vector
{
vector
return vec;
}
//接收标准输入.
void inputvector()
{
vector
int pa ;
cout << "动态内存分配,请输入数字:" << endl;
while(cin >> pa)
{
vec->push_back(pa);
}
outputvector(vec);
}
int main()
{
inputvector();
return 0;
}