
大致意思就是 我在函数内 new 创建了对象,那么在函数外又重新指向了对象,那么怎么 delete 呢?
/**************************** c++ Primer plus 7.13 练习 编写一个程序,要求用户输入最多 10 个高尔夫成绩,并将其存储在一个数组中。程序允许用户提早结束输入,并在 一行上显示所有成绩,然后报告平均成绩。请使用 3 个数组处理函数来分别进行输入、显示和计算平均成绩。请使用 3 个数组 处理函数来分别 ******************************/ #include <iostream> using namespace std; double *inputValue(int *n); void showValue(double arr [],int n); double avgValue(double arr [],int n); const int SIZE = 10; int main(){ int n = 0; double *array = inputValue(&n);// 这里算是将 inputValue 函数中 new 的 double *arr 对象重新指向 array 么? showValue(array,n); double temp = avgValue(array,n); cout << "\navg value : "<<temp<<endl; delete [] array;//这里将 array delete 掉。那么 inputValue 中 new 的 arr 怎么办? 也能被 delete 掉么? return 0; } double * inputValue(int *n) { double * arr = new double[SIZE]; for(int i = 0;i<SIZE;i++) { cin >> arr[i]; (*n)++; } return arr; } void showValue(double arr [] ,int n ) { for(int i = 0;i<n;i++) { cout << arr[i] <<" "; } cout << "\n"; } double avgValue(double arr [],int n) { double total = 0.0; for(int i = 0 ;i<n;i++) { total += arr[i]; } return (total/n); } 1 sec 2016-05-24 21:06:30 +08:00 使用 new 分配的动态数组在内存中是一片区域,而*arr 是一个指针,指向这片区域开头的部分, inputValue()在最后将这个指针作为返回值传递给主函数中的*array ,这两个指针指向的是同一片区域,在主函数中调用 delete[] 就能删除 inputValue()中分配出来的空间。 |
2 ren2881971 OP |