Ծրագրավորման շատ լեզուներ, ինչպիսիք են C, երբեք մի կատարեք սահմանների ավտոմատ ստուգում արագությունը բարձրացնելու համար: Այնուամենայնիվ, սա թողնում է բազմաթիվ անջատված սխալներ և բուֆերային արտահոսքեր աննկատ: Շատ ծրագրավորողներ կարծում են, որ այս լեզուները չափազանց շատ են զոհաբերում արագ կատարման համար:
Արդյո՞ք կապի ստուգումը կատարվում է զանգվածով:
Վերացական. Զանգվածի կապակցված ստուգումը վերաբերում է որոշելուն, թե արդյոք ծրագրի բոլոր զանգվածների հղումները գտնվում են իրենց հայտարարված տիրույթներում: Այս ստուգումը կարևոր է ծրագրային ապահովման ստուգման և վավերացման համար, քանի որ իրենց հայտարարված չափերից ավելի զանգվածների բաժանորդագրումը կարող է առաջացնել անսպասելի արդյունքներ, անվտանգության անցքեր կամ ձախողումներ:
Ինչու C-ն չունի սահմանների ստուգում:
Սա պայմանավորված է նրանով, որ C++-ը չի ստուգում սահմանները: … C++-ի նախագծման սկզբունքն այն էր, որ այն չպետք է լինի ավելի դանդաղ, քան համարժեք C կոդը, և C-ն չի ստուգում զանգվածի սահմանները: Այսպիսով, եթե դուք փորձում եք մուտք գործել այս հիշողության սահմաններից դուրս, ձեր ծրագրի վարքագիծը որոշված չէ, քանի որ սա գրված է C++ ստանդարտում:
Ստուգվու՞մ են արդյոք C զանգվածի ինդեքսները գործարկման ժամանակ:
Իրական խնդիրն այն է, որ C և C++ իրականացումները սովորաբար չեն ստուգում սահմանները (ոչ կոմպիլյացիայի ժամանակ, ոչ էլ գործարկման ժամանակ): Նրանք լիովին թույլատրված են դա անել: Մի մեղադրեք լեզվին դրա համար։
Ի՞նչ կլինի, եթե զանգվածը դուրս գա C-ի սահմաններից:
ArrayIndexOutOfBoundsException կարող է առաջանալ, եթե զանգվածը հասանելի է սահմաններից դուրս: ԲայցC-ում նման ֆունկցիոնալություն չկա, և չսահմանված վարքագիծը կարող է առաջանալ, եթե զանգվածը հասանելի է սահմաններից դուրս: Ծրագիրը, որը ցույց է տալիս դա C-ում, տրված է հետևյալ կերպ.