Stackka kiritiladigan ma’lumotlar stack sig’imidan oshib ketsa, stackoverflow xatoligi yuzaga keladi, bunday holatlar rekursiyada kuzatilishi mumkin. Bunda heapdan foydalangan yaxshi
Agar heap ga yozilgan ma’lumotlar tozalab turilmasdan, dastur ishlashda davom etib yana dinamik obyektlar e’lon qilaversa va ularni o’chirmasa, dastur ishlash jarayonida heapoverflow xatoligi yuzaga kelishi mumkin
Ko’rsatkich boshqa xotira manzilini o’zida saqlaydigan, stackka joylangan qiymat
Memory leakage ni oldini olish uchun dinamik obyektlarni o’chirib yurish yaxshi odat
Agar funksiyaga parametr sifatida beradigan o’zgaruvchimiz funksiya ichida o’zgartirilmasa, unda uni havolasini bergan ma’qul
4 baytdan kichik yoki unga teng qiymatlarni heapga kiritish unchalik yaxshi fikrmas, chunki 32 bitlik OSlarda ko’rsatkich stackdan 4 bayt oladi.
Maqola boshidagi kodimizda Test tipidagi t ni global qilganimizda qayoqqa berkinib olgani sizga qiziqmi? U na stackka, va na heapga joylangan, javobi quyidagi rasmda
Shu joyiga kelganda siz bilan uyushtirgan sayohatimiz ham tugadi. Agar yaxshi gidlik qila olgan bo’lsam bundan xursandman, zeriktirib qo’ymadim degan umiddaman ;).
Quyida kichik kod qoldiraman, nega xato ishlashi mumkinligi haqida o’ylab ko’ring:
int* createArray(int size)
{
int array[size] = {0};//massiv barcha elementlarini nollaymiz
return array;
}
int main(){
int *arr = createArray(4);
for(int i = 0; i<4; i++)
cout<return 0;
} Aytgancha, sayohat boshida kodlarimda ko’rsatkichlardan foydalanmasdim degandim, hozir ham foydalanmayman :) albatta agar koddagi o’zgaruvchilar kattaroq joy talab qilmasa
Mavzu yuzasidan muhokama qiladiganlarimiz shular edi. Agar siz maqoladagi ma’lumotlarda kamchiliklar topsangiz, yoki sizda shu mavzu yuzasidan yuqorida aytilmagan ma’lumotlar bo’lsa maqola muallifiga murojaat qiling, ismingiz maqolada ko’rsatib o’tiladi.
Mavzu bo’yicha shu maqoladagi ma’lumotlar bilan cheklanib qolmasdan qo’shimcha sifatida boshqa manbaalarga ham murojaat qilishingizni so’rab qolaman.
Savollar bo’lsa telegramdagi @C_Genius yoki @cppuz guruhlariga kirib mavzu yuzasidan tushunmagan narsangizni so’rashingiz, yoki muhokama qilishingiz mumkin
Foydalanilgan manbalar: