Главная страница

ОББН лекция 2. Си программалау тіліне кіріспе Жоспар


Скачать 128.11 Kb.
НазваниеСи программалау тіліне кіріспе Жоспар
Дата06.08.2020
Размер128.11 Kb.
Формат файлаdocx
Имя файлаОББН лекция 2.docx
ТипПрограмма
#135233
страница3 из 11
1   2   3   4   5   6   7   8   9   10   11

1. New операторын қолдану.

2. Жадыны азат ету.

3. Жаңа new және delete операторларын құру.




  1. New операторын қолдану



Егер программада массив сипатталатын болса, онда C++ тілінің компиляторы осы элементтерді жадыда сақтау үшін орын бөледі. Кейде әртүрлі жағдайлар болуы мүмкін : алынған массив өлшемі аз немесе керісінше көп. Мысалы, программада 100 элементі бар массив сипатталсын. Егер біз программада элементтер саны 100өден көп массивпен жұмыс істегіміз келсе онда программаны жөндеп, қайтадан компиляциядан өткізуіміз қажет. Енді біз тұрақты бөлінген жадымен бірге, динамикалық, таратылатын жадымен қалай жұмыс істеуге болатынын оқыпөүйренеміз. Мысалы, программаға 100 немесе 25 элементтен тұратын массивтермен жұмыс істеуі қажет болсын. Программада тек қана қажетті орынды бөлу, жадыны динамикалық түрде тарату арқылы арқылы жүзеге асырылады. Оның көмегімен программаға қажетті орынды үздіксіз өзгертіп отыруға болады. Егер программа қажет жадыны программа орындалуы кезінде сұраса, онда сәйкес бөлінетін жадының өлшемін береміз, ал C++ сол жадыға көрсеткішті қайтарады. C++ программаға қажет жадыны азат жады деп аталатын бөліктен алады. Біз бұл тақырыпта программада диамикалық жадыны таратуды және қажет болмаса оны азат етуді қарастырамыз.

C++ тілінде new операторы программаның орындалуы барысында жадыны тарату үшін қолданылады. New операторын қолдану үщін программада қажет ететін жадының өлшемін байтпен береміз. Мысалы, программаға 50өбайттық массив қажет болса, new операторын қолданып, осы жадыны былай беруімізге болады:

char *buffer = new char[50];

Егер new операторы дұрыс орындалып, жады бөлінсе, онда ол көрсеткішті осы бөлінген облыстың басына орналастырады. Біздің жағдайымызда, программа жадыны символдардың массиві үшін тарататындықтан, ол қайтарылатын көрсеткішті тип char ретінде қайтарады Егер new операторы программада сұралған жадыны бөле алмаса, онда мәні 0өге тең NULLөкөрсекішін қайтарады. Программа, new операторын қолданып жадыны динамикалық түрде таратқанда, new операторы қайтаратын мәнді NULL тең екенін білу үшін тексеріп отырады..

Мысалы, келесі программада new операторы 100өбайттық массивке көрсеткіш алу үшін қолданылады:

#include

void main(void)

{
   char*pointer=newchar[100];
   if(pointer!=NULL)cout<<“жадыдұрысбөлінді”<   elsecout<<“жадыныбөлудеқатекетті”<}

Көріп отырғанымыздай, программа new операторы меншіктейтін айнымалыөкөрсеткіштің мәнін тексереді. Егер көрсеткіштің мәні NULL болса, онда new операторы қажет орынды бөле алмағаны, ал егер көрсеткіш мәні NULLөге тең болмаса, онда new жадыны дұрыс бөлген және көрсеткіште бөлінген адрестің бастапқы мәні орналасады.

Алдыңғы программада new операторы 100 байттық жадының орнын бөлу үшін қолданылды. Егер программаға қажетті орын одан аз немесе көп болса, онда программаны қайтадан жөндеп және компиляциядан өткізуге тура келеді. Жадыны динамикалық таратудың мағынасы қажетті жадыны бөлуді автоматтандыру болып табылады. Жадыны тарату уақытында программаны өзгерпей және оны қайтадан компиляциядан өткізбей пайдалану өте тиімті болып табылады. Келесі программада, оның дұрыс орындалуы үшін, қажет орын сұралады және сол берілген мәнге байланысты жадыда орын бөледі:

#include

void main(void)

{
   intsize;
   char*pointer;
   cout<<“массивөлшеміненгіз,30000дейін:“;
   cin>>size;
   if (size <= 30000)

   {
      pointer=newchar[size];
      if(pointer!=NULL)cout<<“жадыбөлінді”<      elsecout<<“жадыбөлінгенжоқ”<   }
}

Ескерту: Егер сіз MSөDOS ортасында жұмыс істесеңіз, онда азат жады есебінде программа 64 Кбайт қана орын бөле алады. Себебі, MSөDOS жүйесінде жұмыс істейтін C++ компиляторы үнсіз келісім бойынша тек, азат жадысы, 64 К6aйm болатын кіші модельмен жұмыс атқарады.

  1. Жадыны азат ету



C++ тілінде new операторы программаға азат жадыны динамикалық түрде таратып береді. Егер программаға бөлінген жады қажет болмаса, онда оны delete операторының көмегімен азат етуге болады. Жадыны delete операторының көмегімен азат ету үшін осы операторға азат ететін жадының көрсеткішін бересіз:

delete pointer;

Келесі программада delete операторы new операторының көмегімен бөлінген жадыны азат етеді:

#include

#include

void main(void)

{
   char*pointer=newchar[100];
   strcpy(pointer,“C++программлаутілі”);
   cout<
   deletepointer;
}


Келесі программада бүтін мәндер үшін 1000 орын бөледі. Массивке 1өден 1000өға дейінгі мәндер жазылады. Одан кейін программа бөлінген жадыны азат етеді және нақты 2000 мәнге орын бөледі:

#include

void main(void)

{
   int*int_array=newint[1000];
   float*float_array;
   inti;
   if (int_array 1= NULL)

   {
      for(i=0;i<1000;i++)int_array[i]=i+1;
      for(i=0;i<1000;i++)cout<      deleteint_array;
   }
   float_array=newfloat[2000];
   if (float_array != NULL)

   {
      for(i=0;i<2000;i++)float_array[i]=(i+1)•1.0;
      for(i=0;i<2000;i++)cout<      deletefloat_array;
   }
}

Келесі программа END_FREE.CPP, егер new операторы жадының мүмкіндігін қамтамасыз ете алмаса end_program функциясын шақырады.

#include

#include // Прототип exit

#include // Прототип set_new_handler

void end_program(void)

{
   cout << «Запрос на память не может быть удовлетворен» << endl;
   exit(l);
}

void main(void)

{
   char*pointer;
   set_new_handler(end_program);
   do

   {
      pointer=newchar[10000];
      cout<<“Выделено10000байт”<   }while(1);
}
1   2   3   4   5   6   7   8   9   10   11


написать администратору сайта