提醒一下:
int *func()
{
int a[10] = {5};
return a;
}
是非法的,因为 a 是局部变量,被申请在系统栈中,局部变量在函数返回后会被销毁,于是你返回的指针指向的是一段已经被系统回收的内存,这样的访问是非法的。
int *func()
{
int *a = new int[10];
a[0] = 5;
return a;
}
是合法的,通过new运算符申请的一段内存是在系统堆上的,其销毁不受系统控制,而由程序员控制,所以如果在外部有int *ret = func(),将 ret 使用完毕后需及时 delete ret;,否则可能造成内存泄露。
fabonacci.cpp
#include <iostream> using namespace std; int *fabonacci(int n) { if(30 >= n > 0) { int *array = new int[n]; switch(n) { case 1: { array[0] = 1; cout << array[0] << endl; break; } case 2: { array[0] = 1; array[1] = 1; cout << array[0] << endl; cout << array[1] << endl; break; } default: { array[0] = 1; array[1] = 1; cout << array[0] << endl; cout << array[1] << endl; for(int i = 2; i < n; i++) { array[i] = array[i - 1] + array[i - 2]; cout << array[i] << endl; } } } return array; } else { cout << "Error! N is out of range! It must be valued from 1 to 30! " << endl; return NULL; } } int main() { int *p = fabonacci(10); if(p != NULL) { int n = 5; cout << "*(p + " << n << ") = " << *(p + n) << endl; } delete(p); return 0; }