C函式返回指標的釋放問題,如何釋放

2021-05-31 21:55:45 字數 1938 閱讀 6214

1樓:好程式設計師

1、指標的new操作:

指標在new之後,會在記憶體堆中分配一個空間,而指標中存放的是這個空間的地址。如:

void main()

輸出為:

0x00431bf0

4分別為分配的空間地址和地址記憶體放的值。

如果寫為:

void main()

輸出為:4

程式的意思就是將0x00431bf0記憶體地址開始的4個byte的塊取出轉換為int型別輸出,即直接讀取記憶體。

2、指標的delete操作:

指標在delete的時候,會將指標指向的記憶體區域釋放掉,而指標同記憶體區域的聯絡並沒有被切斷,仍然會只想原來指向的記憶體區域。如:

void main()

程式輸出:

0x00431bf0

40x00431bf0

-572662307

可以看到p前後指向的地址是相同的,而指向地址的記憶體區域被釋放。

3、空指標:

空指標指向的記憶體區域為記憶體的首地址,是不可讀寫的區域,即空指標不提供操作。刪除空指標是安全的(因為它什麼也沒做)。所以,在寫建構函式,

賦值操作符,或其他成員函式時,類的每個指標成員要麼指向有效的記憶體,要麼就指向空,那在你的解構函式裡你就可以只用簡單地delete 掉他們,而不用

擔心他們是不是被new 過。如:

void main() //輸出0x00000000

4、取出記憶體區域的值

在取某記憶體地址開始的一個區域的值的時候,取出的值取決於用來取值的型別,譬如int為4個byte,char為1個byte,程式如:

void main();

int *pi = a;

char *p = (char*)pi;

cout << *(int *)p++ << endl; //取出p地址,轉化為取4個byte,並取出內容,之後p向後移動一位

cout << *(int *)p << endl; //取出p地址,轉化為取4個byte,並取出內容

cout << (int)*p << endl; //取出1個char型別,並轉換為int型

cout << (int)*(char *)pi << endl; //取出pi地址,轉換為char型別,取出內容,並轉換為int型

}程式輸出:

261115

a的儲存區域安排為:byte1=5,byte2=1,byte3~byte8 = 0;

所以*(int *)p++取的為byte1到byte4; 之後的*(int *)p取的是byte2到byte5;

(int)*p取的是byte2;(int)*(char *)pi取的是byte1,之後轉換為int型。

2樓:匿名使用者

func這樣寫bai

的話,就是要求呼叫func的函式du來釋zhi放daop因為func在main中被呼叫,而又main來釋放,沒有問版題因為free語句是main的最後一權句,就算不寫,程式結束的時候也會自動**

不過其他場合,只要程式不終結,就必須手動free掉,不然記憶體就洩漏了main裡面的s是什麼東西,應該用不著吧

3樓:匿名使用者

不合理,你應該strcpy(p, "abcdef")而不是p = "abcdef"

4樓:匿名使用者

直接delete就可以了。形式:delete 指標名;

5樓:小志

char *func() =>怎麼有 『*』

func(s) =>怎麼傳實參了

6樓:匿名使用者

#include "malloc.h"

#include "string.h"

#include

char *func()

int main()

C 函式指標問題

我不知道你這樣的概念是從哪本書上得來的,什麼指標函式,是c 的標準嗎,c 的標準有這樣的說法嗎。反正我是沒聽說過。不過我知道你的大概意思,你說的指標函式就是指函式的引數是指標。而函式指標 在譚浩強的書上提到過這個概念 就是指向函式的指標。其實還有一種說法說指標函式是指返回指標的函式。我建議你最好是不...

c語言檔案指標和函式問題

首先你先明白這幾個函式的呼叫形式,然後你依據各個呼叫引數你就可以明白函式是如何確定讀入哪一個字元的了 1.fread buffer,size,count,fp 一般呼叫形式 各個引數如下 1 buffer 是一個指標,對fread來說,它是讀入資料的存放地址。對fwrite來說,是要輸出資料的地址。...

c語言自定義的函式如何返回陣列,c語言自定義的函式如何返回一個陣列

方法1 利用全域性變數 分析 全域性變數作為c語言的一個知識點,雖然我們都瞭解它的特點,但在實際教學過程中應用得並不是很多。由於全域性變數的作用域是從定義變數開始直到程式結束,而對於編寫有多個返回值的c語言函式,我們可以考慮把要返回的多個值定義成全域性變數。當函式被呼叫時,全域性變數被更改,我們再把...