函式要返回動態申請記憶體的地址該如何辦呢

2022-05-08 04:03:24 字數 4326 閱讀 8536

1樓:匿名使用者

既然你申請的空間還有用處,當然不能在fun裡面free了,肯定要在呼叫fun的函式裡,在這個空間使用完以後free

2樓:

每次呼叫函式就申請10個字元的空間,當然佔用記憶體就增加了。

既然你malloc了記憶體,就有相應的地方free,一個程式有多少次malloc,在他結束前就應該有多少次free。

你既然要返回指標,就不能在這裡free,如果這裡free掉了,返回的就是野指標。當這個地址使用結束後應該馬上free掉,同時指標置零。

如果不想把malloc和free分開,那就需要更改設計方案,如果只是10個字元,我覺得完全沒必要這麼做,為什麼不在函式外申請空間,然後把地址傳進來?

我不明白為什麼不能把地址作為引數。如果真的不能,也沒什麼別的辦法,用完了就free唄。p雖然是一個區域性變數,但是它已經把地址帶出來了,當你在呼叫這個函式的時候自然是用另外一個變數接收這個地址,用完後free這個地址就可以了。

總的來說,不建議這樣做。空間的申請和釋放還是應該保持同步。

如何返回在函式中動態分配的記憶體地址

3樓:蛋疼

要在函式裡返回記憶體有兩種辦法,一種是指標的指標 **fp ,用這個指標指向一個需要分配記憶體的值。另外一種方法更簡單,你在函式裡創造一個指標然後 return他就可以了。

為什麼在函式裡面申請的動態記憶體,在函式外就無效?

4樓:匿名使用者

在函式裡面申請的動態記憶體在函式有效的,但是指向這塊記憶體的指標需要是全域性的,否則區域性指標被釋放就找不到這塊動態申請的記憶體,這樣也就用不了,相當於無效了。

c/c++定義了4個記憶體區間:**區,全域性變數與靜態變數區,區域性變數區即棧區,動態儲存區,即堆(heap)區或自由儲存區(free store)。通常定義變數(或物件),編譯器在編譯時都可以根據該變數(或物件)的型別知道所需記憶體空間的大小,從而系統在適當的時候為他們分配確定的儲存空間。

這種記憶體分配稱為靜態儲存分配;有些操作物件只在程式執行時才能確定,這樣編譯時就無法為他們預定儲存空間,只能在程式執行時,系統根據執行時的要求進行記憶體分配,這種方法稱為動態儲存分配。所有動態儲存分配都在堆區中進行。 所謂動態記憶體分配就是指在程式執行的過程中動態地分配或者**儲存空間的分配記憶體的方法。

動態記憶體分配不象陣列等靜態記憶體分配方法那樣需要預先分配儲存空間,而是由系統根據程式的需要即時分配,且分配的大小就是程式要求的大小。

使用動態記憶體分配的程式中,常常會出現很多錯誤。

1. 對null指標進行解引用操作

2. 對分配的記憶體進行操作時越過邊界

3. 釋放並非動態分配的記憶體

4. 試圖釋放一塊動態分配的記憶體的一部分以及一塊記憶體被釋放之後被繼續使用。

5樓:宛瑩

正確的是傳入指標的指標,如

6樓:匿名使用者

這是學習數學的函式吧 不是程式設計的 請向c語言吧!轉

7樓:

函式呼叫結束,系統自動**了

8樓:

誰說不能用?你把動態空間首地址返回給主調函式,並賦給另一個同類指標,看看能不能用?

在函式中動態分配的記憶體怎麼釋放,沒有把地址返回給呼叫它的函式

9樓:

「沒有把地址返回給呼叫它的函式」-- 如果是全域性量,變數在全域性,不需返回。如果是函式區域性量,返回 也沒用,因為退出 函式 時,就沒用了。

函式中動態分配的記憶體(區域性量),用畢,應當在函式中 釋放。

釋放方法與 如何 動態分配 的方法有 關,可能是 free, 可能是 delete.

也可能是別的,例如:deleteobject(font);

10樓:火焰無心

是用什麼函式動態分配的呢?malloc還是什麼? 需要用free函式來釋放,如果是用farmalloc的話,使用farfree來釋放,記住釋放完以後,指標要賦值null。

11樓:賁鐵幹

什麼是跳躍式的呼叫?呼叫什麼?如果動態分配的空間的指標被返還或者是全域性變數的話另一個函式就可以通過這個指標來對這個空間進行操作。

你在開玩笑吧?如果i是一個函式個區域性變數那另一個函式是無法呼叫它的。除非你把i變成全域性變數這兩個函式才有效。

第二種做法是可行的。如果你執行到那裡程式沒有彈出對話方塊說有run time error的話就說明先前空間沒有被釋放,因為對釋放過的空間用delete的話就會出錯。

12樓:匿名使用者

那就直接該函式中,在返回之前釋放該動態分配的記憶體啊

在函式模組內動態申請的記憶體空間,又不能再函式內釋放掉的話,系統是怎麼處理的呢?

13樓:匿名使用者

只要程式還在執行,就永遠不釋放——除非在別的函式中free,否則這塊動態申請的記憶體就不能再有其他用處了

c++中 如何釋放作為函式返回值的動態申請的記憶體

14樓:匿名使用者

樓主的函式是錯誤的,不能把函式內的區域性指標變數return,這樣會返回無效指標的.

樓上兩位的使用全域性指標變數或將指標變數作為引數傳入都是正確的做法.

15樓:匿名使用者

#include

#include

#include

using namespace std;

void getmemory3(char** p, int num)void freememory3(char** p)int main(void)

16樓:匿名使用者

char *p;

char *getmemory3(int num)

void test3(void)

什麼是c語言裡面的動態儲存分配函式啊?

17樓:匿名使用者

不同的編譯系統所提供的多少不同。有的編譯系統放在malloc.h中,有的編譯系統放在stdlib.h中。常用的有如下幾種:

1.記憶體分配和釋放函式mall0c()和free()

這些函式前面已經出現過。malloc ( )函式的功能是動態地向記憶體申請指定大小的空間,所指定的大小用位元組數表示。其呼叫格式如下:

malloc(size)

其中,malloc是該函式名,size是用來表示所申請的記憶體大小的位元組數。該函式的返回值為void*型,即為某種型別的指標,使用時將其返回值強制成某種型別的指標。當申請成功時該函式返回所申請記憶體的緩衝區的首地址,否則返回null.

例如,實際中申請50個整型變數的記憶體空間可以這樣使用:

int * p;

p=(int*)malloc ( 50*sizeof (int));

if(p==null)

{prints("out memory!\n");

exit(1);

當申請記憶體空間時,總是要判斷一下是否申請成功。如果申請成功了,繼續往下進行;如果申請失敗,則應退出該程式。

free( )函式的功能是用來釋放使用mallac ( )函式分配的記憶體空間。由於機器中用來進行動態分配的記憶體空間是有限,及時釋放不用的記憶體空間是十分重要的。該函式呼叫格式如下:

free(p)

其中,free是該函式的名字,p是要被釋放的記憶體空間的首地址,也是使用。malloc ( )函式所分配的記憶體空間的返回值。執行該函式則使指標p所指向的記憶體區域被釋放。

18樓:魔尊

所謂動態分配,就是需要的時候再分配,這是相對於靜態分配而言的,靜態分配就是一次分配完畢,不管你用多少。而動態分配則是按需分配。

19樓:匿名使用者

動態記憶體分配即分配記憶體大小在執行時才確定,一般在堆中分配。

c語言動態記憶體分配相關的函式如下幾個:malloc、calloc、realloc、free;

malloc函式的使用比較直接,一個成功的malloc呼叫返回分配的size大小的記憶體的指標。失敗時返回null並將錯誤**置為enomem。

calloc函式可以分配nr個size大小的記憶體空間,一般用於一組struct結構體的分配。

realloc函式將ptr指向的記憶體空間重新分配大小為size並返回新的記憶體首地址。

free函式釋放前三個函式申請的記憶體空間,所以,使用前三個分配函式分配的記憶體一定要free掉。

20樓:離離原上花開

malloc()

函式原型:

void *malloc( size_t size );

C 中以類名為返回值型別的函式的返回值要怎麼寫?就是最後的return

class a a fun 這是引用返回,不進行值拷貝 a fun 這個返回時,做值拷貝 class test test fun c 中,定義一個函式為bool型別有什麼用,return true 和return false 的區別在哪?獲取函式返回值 比如bool getvalue bool b ...

怎樣讓python多次呼叫函式讓函式返回的值相加

下面是一個例子,用 for 迴圈呼叫 10 次test 函式,並把返回值加到 sum 變數中 coding utf 8 def test n return n 1 sum 0 使用版 權 for 迴圈呼叫 10 次 test 函式for i in range 10 呼叫 test 函式,並將返回值加...

Python裡為什麼函式可以返回函式內部定義的函式

你這是物件導向的思想,應該使用class一個類,而不是def一個函式了 python 裡為什麼函式可以返回一個函式內部定義的函式 沒有複製,函式也是個物件,基本就和你 return 一個 list 一個 dict 沒什麼兩樣。試試看在 python repl 中建立一個 function def f...