C 中使用new遇到的乙個小問題

2021-07-24 19:37:44 字數 1256 閱讀 4345

看下面的一段**:

int main()

輸出結果:

分析:

上面的**中指標p和指標p_int都是new int[100]這段記憶體的首位址,使用這兩個指標都可以操作這段記憶體。在第七行使用delete

釋放了開闢的這段記憶體,將指標p的指向置成null。但是需要注意的是:p_int的指向還是不變,還是指向剛開闢那段記憶體的首位址

但是該段記憶體已經被釋放,所以最後的第十行還是將p_int所指向位址之後的400個位元組的資料列印出來,但是這個時候p_int所指向

位址後面的記憶體空間已經被釋放,值是不確定的,所以列印出來就是一些很奇怪的數字。

在這段**中,如果在p=null之後,列印出p_int的值,發現還是剛開始開闢記憶體的位址。

delete p;

p = null;

cout << p_int << endl;

輸出結果:00869500

在這段**中,如果在再加一句釋放記憶體的**:

for(int i=0;i<100;i++)

cout << p_int[i] << endl;

delete p_int;

程式會顯示debug assertion failed的錯誤。因為同一段記憶體被釋放了兩次。

使用new在堆中開闢了一段記憶體,注意:

1)new開闢的記憶體是在堆中

2)釋放記憶體必須通過delete進行記憶體的釋放而且只能釋放一次,同一段記憶體不能多次釋放。釋放記憶體的時候只需要用任何乙個指向該段記憶體的指標來釋放就可以。但是不能多次釋放。

3)new返回的是新開闢這段記憶體的位址,如果開闢記憶體失敗,會返回null。

4)使用這段記憶體可以將new返回的位址賦給乙個指標,用該指標才操作這段記憶體。

注意:特別是有多個指標指向同一段開闢的記憶體的時候,一定只能釋放一次,不能多次釋放,只用乙個指標釋放記憶體就可以,不然會出現錯誤。

初學python遇到的乙個小問題

python中的乙個小問題 問題是這樣的 old 1,2,3,4,5 new old old 6 print new 求輸出結果,第一眼我以為答案是 6 但是當我上機實驗才發現答案是 1,2,3,4,5 為什麼會是這個答案呢?我 檢視old 和 new 的位址 old 1,2 3,4 new old...

OGG 使用def檔案同步遇到的乙個小問題

使用ogg進行資料遷移 源端 oracle 10.2.0.4 goldgengate 11.1.1.0.0 目標端 oracle 11.2.0.4 goldgengate 12.2.0.1.1 還是按照之前的方法,源端用defgen生成def檔案傳到目標端,入庫使用sourcedef引數,不過遇到了...

記錄一下使用git遇到的乙個小問題

今天我在敲完 快下班時準備提交 當執行git add 操作的時候,出現 如下 錯誤 if no other git process is currently running,this probably means a git process crashed in this repository ea...