#include<iostream>
#define N 50
void fun1(int n)
{
int* a = new int[n];
for (int i = 0; i < n; i++)
{
a[i] = i;
}
delete[] a; //這里除非使用delete釋放,否則只能等程式結束,因為外部不可能釋放區域變數。這個沒有問題。
}
int* fun2(void)
{
int a[N] = {0};
for (int i = 0; i < N; i++)
{
a[i] = i+5;
}
return a; //堆疊上的區域變數,出了作用于會自動釋放
}
int* fun3(int n)
{
int* a = new int[n];
for (int i = 0; i < n; i++)
{
a[i] = i;
}
return a; //堆上的區域變數作為回傳值,如何釋放?
}
void fun4(int n, int* a = NULL)
{
; //為什么不做任何事,傳入空指標也會報錯?
}
int main()
{
int n = 50;
fun1(n);
int* aa = new int[n]; //第一種,回傳值并賦值,再釋放外部變數。
aa = fun2();
for (int i = 0; i < n; i++)
{
std::cout << aa[i] << std::endl; //只有首地址值正確,其他元素全都隨機值,但是全部有輸出,不報錯。
} //報錯,為什么?
delete[] aa;
int* bb = new int[n]; //第一種,回傳值并賦值,再釋放外部變數。
bb = fun3(n); //函式內部創建的a不釋放怎么辦?
delete[] bb;
int* p = NULL;
fun4(n); //報錯,為什么,只不過是傳入引數是NULL而已啊
fun4(n, p); //報錯,為什么,只不過是傳入引數是NULL而已啊
system("pause");
return 0;
}
uj5u.com熱心網友回復:
fun2里面堆疊上記憶體不能deletefun3不delete就記憶體泄漏
fun4出錯是因為之前的錯誤產生連鎖反應
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/27611.html
標籤:基礎類
上一篇:簡單的字串
