Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Bộ nhớ động trong ANSI-C






Toá n tử newdelete là đ ộ c quyề n C++ và chú ng khô ng có trong ngô n ngữ C. Trong ngô n ngữ C, đ ể có thể sử dụ ng bộ nhớ đ ộ ng chú ng ta phả i sử dụ ng thư việ n stdlib.h . Chú ng ta sẽ xem xé t cá ch nà y vì nó cũ ng hợ p lệ trong C++ và nó vẫ n cò n đ ư ợ c sử dụ ng trong mộ t số chư ơ ng trì nh.

Hà m malloc
Đ â y là mộ t hà m tổ ng quá t đ ể cấ p phá t bộ nhớ đ ộ ng cho con trỏ. Cấ u trú c củ a nó như sau:

void * malloc (size_t nbytes );

trong đ ó nbytes là số byte chú ng ta muố n gá n cho con trỏ. Hà m nà y trả về mộ t con trỏ kiể u void*, vì vậ y chú ng ta phả i chuyể n đ ổ i kiể u sang kiể u củ a con trỏ đ í ch, ví dụ:

char * ronny;
ronny = (char *) malloc (10);

Đ oạ n mã nà y cấ p phá t cho con trỏ ronny mộ t khố i nhớ 10 byte. Khi chú ng ta muố n cấ p phá t mộ t khố i dữ liệ u có kiể u khá c char (lớ n hơ n 1 byte) chú ng ta phả i nhâ n số phầ n tử mong muố n vớ i kí ch thư ớ c củ a chú ng. Thậ t may mắ n là chú ng ta có toá n tử sizeof , toá n tử nà y trả về kí ch thư ớ c củ a mộ t kiể u dữ liệ u cụ thể.

int * bobby;
bobby = (int *) malloc (5 * sizeof(int));

Đ oạ n mã nà y cấ p phá t cho bobby mộ t khố i nhớ gồ m 5 số nguyê n kiể u int, kí ch cỡ củ a kiể u dữ liệ u nà y có thể bằ ng 2, 4 hay hơ n tù y thuộ c và o hệ thố ng mà chư ơ ng trì nh đ ư ợ c dị ch.

Hà m calloc.
calloc hoạ t đ ộ ng rấ t giố ng vớ i malloc, sự khá c nhau chủ yế u là khai bá o mẫ u củ a nó:

void * calloc (size_t nelements , size_t size );

nó sử dụ ng hai tham số thay vì mộ t. Hai tham số nà y đ ư ợ c nhâ n vớ i nhau đ ể có đ ư ợ c kí ch thư ớ c tổ ng cộ ng củ a khố i nhớ cầ n cấ p phá t. Thô ng thư ờ ng tham số đ ầ u tiê n ( nelements ) là số phầ n tử và tham số thứ c hai ( size ) là kí ch thư ớ c củ a mỗ i phầ n tử. Ví dụ, chú ng ta có thể đ ị nh nghĩ a bobby vớ i calloc như sau:

int * bobby;
bobby = (int *) calloc (5, sizeof(int));

Mộ t đ iể m khá c nhau nữ a giữ a malloc calloc calloc khở i tạ o tấ t cả cá c phầ n tử củ a nó về 0.

Hà m realloc.
Nó thay đ ổ i kí ch thư ớ c củ a khố i nhớ đ ã đ ư ợ c cấ p phá t cho mộ t con trỏ.

void * realloc (void * pointer , size_t size );

tham số pointer nhậ n và o mộ t con trỏ đ ã đ ư ợ c cấ p phá t bộ nhớ hay mộ t con trỏ null, và size chỉ đ ị nh kí ch thư ớ c củ a khố i nhớ mớ i. Hà m nà y sẽ cấ p phá t size byte bộ nhớ cho con trỏ. Nó có thể phả i thay đ ổ i vị vị trí củ a khố i nhớ đ ể có thể đ ủ chỗ cho kí ch thư ớ c mớ i củ a khố i nhớ, trong trư ờ ng hợ p nà y nộ i dung hiệ n thờ i củ a khố i nhớ đ ư ợ c copy tớ i vị trí mớ i đ ể đ ả m bả o dữ liệ u khô ng bị mấ t. Con trỏ mớ i trỏ tớ i khố i nhớ đ ư ợ c hà m trả về. Nế u khô ng thể thay đ ổ i kí ch thư ớ c củ a khố i nhớ thì hà m sẽ trả về mộ t con trỏ null như ng tham số pointer và nộ i dung củ a nó sẽ khô ng bị thay đ ổ i.

Hà m free.
Hà m nà y giả i phó ng mộ t khố i nhớ đ ộ ng đ ã đ ư ợ c cấ p phá t bở i malloc , calloc hoặ c realloc .

void free (void * pointer );

Hà m nà y chỉ đ ư ợ c dù ng đ ể giả i phó ng bộ nhớ đ ư ợ c cấ p phá t bở i cá c hà m malloc , calloc and realloc .

Bà i 11: Cá c Cấ u Trú c


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.007 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал