誰能講解了C 中 有關動態分配記憶體的問題

時間 2023-06-05 17:15:03

1樓:匿名使用者

靜態與動態記憶體分配的兩個主要區別是:

1、靜態物件是有名字的變數,我們直接對其進行操作。而動態物件是沒有名字的變數,我們通過指標間接地對它進行操作。

2、靜態物件的分配與釋放由編譯器自動處理。程式設計師需要理解這一點,但不需要做任何事情。相反,動態物件的分配與釋放,必須由程式設計師顯示地管理,相對來說比較容易出錯,它通過new和delete兩個表示式來完成。

物件的動態分派可通過new表示式的兩個版本之一來完成。第一個版本用於分配特定型別的單個物件。

例如: int *pint = new int(1024);

表示式返回物件在記憶體中的地址。接著,這個地址被用來初始化指標物件pint。

new表示式的第二個版本,用於分配特定型別和位數的陣列。

例如:int *pia=new int[4];

分配了一個含有四個整數元素的陣列。不幸的是,我們沒有辦法給動態分配的陣列的每個元素顯式地指定一個初始值。

當用完了動態分配地物件或物件地陣列時,我們必須顯式地釋放這些記憶體。我們可以通過使用delete表示式地兩個版本之一來完成這件事情,例如:刪除單一物件。

delete pint;

陣列形式地delete表示式為:

delete pia;

如果忘記刪除動態分配地記憶體,程式就會在結束時出現記憶體洩漏(memory leak)的問題。

2樓:匿名使用者

相對於靜態而言的 動態就是程式執行過程中 用到了才去分配 靜態就是一開始就分配好的。

關於c語言動態記憶體分配的問題!

3樓:冰凌v楓

要實現動態記憶體的分配,除了利用含指標成員的結構體之外,還需利用c語言提供的幾個標準庫函式。(使用時應包含標頭檔案「或「或「

函式。函式原型為void *malloc(unsigned int size);在記憶體的動態儲存區中分配一塊長度為"size" 位元組的連續區域。函式的返回值為該區域的首地址。 「型別說明符」表示把該區域用於何種資料型別。

型別說明符*)表示把返回值強制轉換為該型別指標。「size」是一個無符號數。例如:

pc=(char *)malloc (100); 表示分配100個位元組的記憶體空間,並強制轉換為字元陣列型別,函式的返回值為指向該字元陣列的指標, 把該指標賦予指標變數pc。若size超出可用空間,則返回空指標值null。

函式。函式原型為void *calloc(unsigned int num, unsigned int size)

按所給資料個數和每個資料所佔位元組數開闢儲存空間。其中num為資料個數,size為每個資料所佔位元組數,故開闢的總位元組數為 num*size。函式返回該儲存區的起始地址。

calloc函式與malloc 函式的區別僅在於一次可以分配n塊區域。例如: ps=(struct stu*) calloc(2,sizeof (struct stu));其中的sizeof(struct stu)是求stu的結構長度。

3. realloc函式:

函式原型為void *realloc(void *ptr, unsigned int size)

重新定義所開闢記憶體空間的大小。其中ptr所指的記憶體空間是用前述函式已開闢的,size為新的空間大小,其值可比原來大或小。函式返回新儲存區的起始地 址(該地址可能與以前的地址不同)。

例如p1=(float *)realloc(p1,16);將原先開闢的8個位元組調整為16個位元組。

動態申請的記憶體空間要進行手動用free()函式釋放。

文字排版的基礎誰能講解下嗎!還有文字怎麼排才好看

文字排版有公文國標的 我把公文國標發給你,你不懂的話可以問我 男士反翹風格髮型怎麼才能燙出來?有誰能幫我講解下嗎?如何排版? 你說的是外翻翹吧?說容易也不容易,它主要是拉角度問題,上槓一般學幾個月就會了,拉角度最不容易,頭髮質量不同角度提拉也不同,完全評感覺,看你個人經驗吧!這個電氣一次系統圖怎麼看...

誰能詳細講解一下物理學中的高斯定理

找本物理 電磁學 慢慢看吧,講得很詳細的。積分形式指高斯面上的電通量與高斯面內的淨電荷量成正比 微分形式指空間某點處的電場的散度與該點處的電荷密度成正比。這兩種形式等價。 弭愷浦採楓 高斯定理體現的是電場的有源性,積分形式是e ds的第二類曲面積分等於q 0,微分形式為dive 0,其中q為被積分割...

誰能幫忙解釋一下C中的Focus

如果你想讓某個控制元件處於焦點狀態下的話你就可以使用如下語句了 control.focus 其中control為控制元件名 至於焦點的定義,應該是控制元件可以接收滑鼠或鍵盤輸入的能力,意思就是,如果某個文字框處於焦點的話,你就可以直接輸入文字了 一句話使控制元件取得焦點 用法control.focu...