很久没写
之前有个笑话,是说:几个程序员去餐厅吃饭,那个会把盘子放回原地的一定是C/C++程序员,因为他们要自己清理内存.
好了,来上题目.
编写函数,返回一个动态分配的int的vector.将此vector传递给另一个函数,这个函数读取标准输入,将读入的值保存在vector元素中.再将vector传递给另一个函数.打印读入的值.记得在恰当的时候delete vector.
小心:动态内存管理容易出错
使用new和delete管理动态内存存在三个问题:
- 忘记delete内存,会导致内存泄漏,而且不容易发现.
- 使用已经释放掉的对象.有时可以检测出这种错误.
- 同一块内存释放两次.
相对于发现“罪证”,制造“罪证”显然容易多了。
源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | /************************************************************************* > File Name: test.12.6.cpp > Author: puruidong > Mail: 1@w1520.com > Created Time: 2014年07月25日 ************************************************************************/ #include<iostream> #include<new> #include<vector> using namespace std; /************************************ 编写函数,返回一个动态分配的int的vector.将此vector传递给另一个函数,这个函数读取标准输入,将读入的值保存在vector元素中.再将vector传递给另一个函数.打印读入的值.记得在恰当的时候delete vector. *********************************************/ //输出vector中的内容,并释放内存 void outputvector(vector<int>* vec) { cout << "\noutputvector\n" << endl; for(const auto &n:*vec) { cout << n << endl; } delete vec;//一定要释放内存. /* 下面这一行代码是为了避免"空悬指针"的出现而 添加的. 执行下面这一行代码之后,vec将不能再次使用. */ vec=nullptr; //报错.cout << vec->size() << endl; } //获取动态vector. vector<int>* getve() { vector<int> *vec=new vector<int>; return vec; } //接收标准输入. void inputvector() { vector<int> *vec=getve(); int pa ; cout << "动态内存分配,请输入数字:" << endl; while(cin >> pa) { vec->push_back(pa); } outputvector(vec); } int main() { inputvector(); return 0; } |