『壹』 C語言的動態存儲函數及用法。並舉例 ,要求簡單明了……
頭文件是#include
<malloc.h>
用法舉例:
char
*p;
p
=
(char
*)malloc(100);
//申請100位元組的內存空間給p
free(p);
//釋放所申請的空間
『貳』 malloc函數實現的功能是什麼
當內存不再使用時,應使用free()函數將內存塊釋放。 malloc的語法是:指針名=(數據類型*)malloc(長度),(數據類型*)表示指針.malloc()是C語言中動態存儲管理的一組標准庫函數之一。其作用是在內存的動態存儲區中分配一個長度為size的連續空間。其參數是一個無符號整形數,返回值是一個指向所分配的連續存儲域的起始地址的指針。 動態內存分配就是指在程序執行的過程中動態地分配或者回收存儲空間的分配內存的方法。動態內存分配不像數組等靜態內存分配方法那樣需要預先分配存儲空間,而是由系統根據程序的需要即時分配,且分配的大小就是程序要求的大小。本文簡單介紹動態內存分配函數malloc()及幾種實現方法。 1. 簡介 malloc()是C語言中動態存儲管理的一組標准庫函數之一。其作用是在內存的動態存儲區中分配一個長度為size的連續空間。其參數是一個無符號整形數,返回值是一個指向所分配的連續存儲域的起始地址的指針。還有一點必須注意的是,當函數未能成功分配存儲空間(如內存不足)就會返回一個NULL指針。所以在調用該函數時應該檢測返回值是否為NULL並執行相應的操作。 2. 函數說明 C語言的動態存儲管理由一組標准庫函數實現,其原型在標准文件<stdlib.h>里描述,需要用這些功能時應包含這個文件。與動態存儲分配有關的函數共有四個,其中就包括存儲分配函數malloc()。函數原型是:void *malloc (size_t n);這里的size_t是標准庫里定義的一個類型,它是一個無符號整型。這個整型能夠滿足所有對存儲塊大小描述的需要,具體相當於哪個整型由具體的C系統確定。malloc的返回值為(void *)類型(這是通用指針的一個重要用途),它分配一片能存放大小為n的數據的存儲塊,返回對應的指針值;如果不能滿足申請(找不到能滿足要求的存儲塊)就返回NULL。在使用時,應該把malloc的返回值轉換到特定指針類型,賦給一個指針。 注意,雖然這里的存儲塊是通過動態分配得到的,但是它的大小也是確定的,同樣不允許越界使用。例如上面程序段分配的塊里能存n個雙精度數據,隨後的使用就必須在這個范圍內進行。越界使用動態分配的存儲塊,尤其是越界賦值,可能引起非常嚴重的後果,通常會破壞程序的運行系統,可能造成本程序或者整個計算機系統垮台。 下例是一個動態分配的例子: #include <stdio.h> #include<stdlib.h> main() { int count,*array; /*count是一個計數器,array是一個整型指針,也可以理解為指向一個整型數組的首地址*/ count=100; if((array=(int *)malloc(10*sizeof(int))) == NULL) { printf("不能成功分配存儲空間。"); exit(1); } for(count=0;count<10;count++) /*給數組賦值*/ array[count]=count; for(count=0;count<10;count++) /*列印數組元素*/ printf("%2d",array[count]); } 上例中動態分配了10個整型存儲區域,然後進行賦值並列印。例中if((array=(int *) malloc (10*sizeof(int)))==NULL)語句可以分為以下幾步: 1)分配10個整型的連續存儲空間,並返回一個指向其起始地址的整型指針 2)把此整型指針地址賦給array 3)檢測返回值是否為NULL 提問者 的感言: 謝啦。。
『叄』 什麼是c語言裡面的動態存儲分配函數啊
動態內存分配即分配內存大小在運行時才確定,一般在堆中分配。
C語言動態內存分配相關的函數如下幾個:malloc、calloc、realloc、free;
malloc函數的使用比較直接,一個成功的malloc調用返回分配的size大小的內存的指針。失敗時返回NULL並將錯誤代碼置為ENOMEM。
calloc函數可以分配nr個size大小的內存空間,一般用於一組struct結構體的分配。
realloc函數將ptr指向的內存空間重新分配大小為size並返回新的內存首地址。
free函數釋放前三個函數申請的內存空間,所以,使用前三個分配函數分配的內存一定要free掉。
『肆』 C語言中如何動態增加內存空間
動態增加內存空間 可以用 realloc 函數。函數原型是。
void* realloc (void* ptr, size_t size);
例如,你第一次用 malloc 函數 動態分配了空間,隨著一步步運算,覺得空間不夠,需要加大空間,與此同時,原先空間里的數據需保留並還要繼續使用,這時需要用 realloc,它能滿足此需要。
下面是完整的程序例子。告訴使用 realloc 的竅門。
#include <stdio.h> /* printf, scanf, puts */
#include <stdlib.h> /* realloc, free, exit, NULL */
int main ()
{
int input,n;
int count = 0;
int* numbers = NULL;
int* more_numbers = NULL;
do {
printf ("Enter an integer value (0 to end): ");
scanf ("%d", &input);
count++;
more_numbers = (int*) realloc (numbers, count * sizeof(int));
if (more_numbers!=NULL) {
numbers=more_numbers;
numbers[count-1]=input;
}
else {
free (numbers);
puts ("Error (re)allocating memory");
exit (1);
}
} while (input!=0);
printf ("Numbers entered: ");
for (n=0;n<count;n++) printf ("%d ",numbers[n]);
free (numbers);
return 0;
}
『伍』 C語言中的動態存儲管理的命令的作用是什麼
malloc()是動態內存分配函數,用來向系統請求分配內存空間。當無法知道內存具體的位置時,想要綁定真正的內存空間,就要用到malloc()函數。因為malloc只分配內存空間,並不能對分配的空間進行初始化,所以申請到的內存中的值是隨機的,經常會使用memset()進行置0操作後再使用。
『陸』 C語言中的動態內存分配的用法舉例
1、malloc函數:其作用是在內存的動態存儲區中分配一個長度為size的連續空間。其參數是一個無符號整形數,返回值是一個指向所分配的連續存儲域的起始地址的指針。
2、free函數:由於內存區域總是有限的,不能不限制地分配下去,而且一個程序要盡量節省資源,所以當所分配的內存區域不用時,就要釋放它,以便其它的變數或者程序使用。這時我們就要用到free函數。
3、calloc函數:其作用是在內存的動態存儲區中分配n個長度為 size 的連續空間。函數返回一個指向分配區域的起始位置的指針;如果分配不成功,則返回NULL。
(6)c語言中的動態儲存管理命令擴展閱讀:
函數運算符:
new
運算符new用於向系統申請動態存儲空間,並把首地址作為運算結果,它的使用形式為:
指針變數=new 數據類型;
例如:
int *p=new int
該語句的作用是會用new從內存中申請了一個int型變數(4個位元組),並將該變數的首地址賦給指針變數p。
new所建立的變數的初始值是任意的,也可在用new分配內存的同時進行初始化。使用形式為:
指針變數=new 數據類型(初始值)。
delete
堆內存可按照要求進行分配,程序對內存的需求量隨時會發生變化,有時程序在運行種可能會不再需要由new分配的內存空間,而且程序還未運行結束,這時就需要把先前佔用的內存空間釋放給堆內存,以後重新分配,供程序的其他部分使用。運算符delete用於釋放new分配的內存空間,刪除建立的對象,它的使用形式為:
delete指針變數;
其中的指針變數中保存著new分配的內存的首地址。
『柒』 如何用C語言做自動動態存儲數據
這個方法是有的。
(註:一般用結構體判斷,所以下面的解釋都是結構體型的。首先說明,我定義了一個結構體
struct stu{ char ch[maxlen];struct stu *next;};)
首先聲明頭文件malloc.h,即#included<malloc.h>
隨後使用動態內存分配, 比如int *p;p=(struct stu*)malloc(sizeof(struct stu*) * m)。
-------以上是開辟內存單元
-------------------------------------------
接下來說說如何擴充內存單元
你講:「如何用C語言做自動動態存儲數據」,其實所謂的「自動動態存儲數據」,關鍵是2點
1、怎麼動態存儲
2、怎麼在存儲單元不夠用時擴充。
對於第1個問題,用鏈式結構就好了,這很簡單,具體看看有關於介紹鏈表的書就好。不推薦《數據結構》,推薦《演算法與數據結構》或《數據結構與演算法分析》。
針對第2個問題,由於不知道你水平如何,所以現在只提一種簡單有效的方法,那就是用if()語句做判斷,例如前面的*p:if(p==NULL)
{ p2=(struct stu*)malloc(sizeof(struct stu*) * m*2);//<-內存擴大兩倍
p->ch[maxlen]=p2->ch[maxlen];
}
這樣就好了。(注意:maxlen這里在具體實現代碼時要變。)
如果你覺得我的描述有點簡單,咱們還可以繼續討論。如果覺得難了點,那你真的要好好了解數據結構與演算法之間的關系了。
加油吧朋友!!!!!!!