Heap -da, statik bo'lmagan va mahalliy o'zgaruvchilar esa Stack


Oddiy massiv deklaratsiyasi va yangisidan foydalanish Oddiy massivni e'lon


Download 28.76 Kb.
bet3/3
Sana24.01.2023
Hajmi28.76 Kb.
#1114475
1   2   3
Bog'liq
Dinamik xotira

Oddiy massiv deklaratsiyasi va yangisidan foydalanish Oddiy massivni e'lon 
qilish va new yordamida xotira blokini ajratish o'rtasida farq bor. Eng muhim farq shundaki, oddiy massivlar kompilyator tomonidan ajratiladi (agar massiv mahalliy bo'lsa, u holda funksiya qaytib kelganda yoki tugallanganda ajratiladi). Biroq, dinamik ravishda ajratilgan massivlar dasturchi tomonidan ajratilmagunicha yoki dastur tugatilgunga qadar har doim shu yerda qoladi.
Ishlash vaqtida yetarlicha xotira mavjud bo'lmasa-chi?  
Ajratish uchun to'plamda yetarlicha xotira mavjud bo'lmasa, yangi so'rov std::bad_alloc turidagi istisnoni tashlash orqali muvaffaqiyatsizlikka uchraganligini bildiradi, agar “nothrow” yangi operator bilan ishlatilmasa, u holda NULL ko'rsatkichni qaytaradi (o'ting "Yangi operatorni istisno qilish" bo'limimaqola). Shuning uchun, dasturni ishlatishdan oldin new tomonidan ishlab chiqarilgan ko'rsatkich o'zgaruvchisini tekshirish yaxshi fikr bo'lishi mumkin. 
int *p = new(nothrow) int;
if (!p)
{
cout << "Xotira ajratilmadi\n";
}
o'chirish operatori
Dinamik ravishda ajratilgan xotirani bo'shatish dasturchining mas'uliyati bo'lganligi sababli, dasturchilarga C++ tilida o'chirish operatori taqdim etiladi. 
Sintaksis: 
// Ko'rsatgich-o'zgaruvchi bilan ko'rsatilgan xotirani bo'shatish ko'rsatgich-o'zgaruvchini
o'chirish ;
Bu erda ko'rsatgich o'zgaruvchisi new tomonidan yaratilgan ma'lumotlar ob'ektiga ishora qiluvchi ko'rsatgichdir . 
Misollar: 
p o'chirish;
o'chirish q;
Ko'rsatkich o'zgaruvchisi tomonidan ko'rsatilgan dinamik ravishda ajratilgan massivni bo'shatish uchun quyidagi o'chirish shaklidan foydalaning : 
// Xotira blokini bo'shatish
// ko'rsatgich-o'zgaruvchi bilan ko'rsatilgan
delete[] pointer-variable; Misol:
// Bu butun massivni
bo'shatadi // p bilan ko'rsatilgan.
oʻchirish[] p;

  • CPP

// C++ program to illustrate dynamic allocation
// and deallocation of memory using new and delete
#include
using namespace std;
int main ()
{
// Pointer initialization to null
int* p = NULL;
// Request memory for the variable
// using new operator
p = new(nothrow) int;
if (!p)
cout << "allocation of memory failed\n";
else
{
// Store value at allocated address
*p = 29;
cout << "Value of p: " << *p << endl;
}
// Request block of memory
// using new operator
float *r = new float(75.25);
cout << "Value of r: " << *r << endl;
// Request block of memory of size n
int n = 5;
int *q = new(nothrow) int[n];
if (!q)
cout << "allocation of memory failed\n";
else
{
for (int i = 0; i < n; i++)
q[i] = i+1;
cout << "Value store in block of memory: ";
for (int i = 0; i < n; i++)
cout << q[i] << " ";
}
// freed the allocated memory
delete p;
delete r;
// freed the block of allocated memory
delete[] q;
return 0;
}

Chiqish
P qiymati: 29
r qiymati: 75,25
Xotira blokidagi qiymatni saqlash: 1 2 3 4 5
Vaqt murakkabligi: O(n), bu yerda n - berilgan xotira hajmi. 
Download 28.76 Kb.

Do'stlaringiz bilan baham:
1   2   3




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling