Zolakwika zomwe zimachitika kawirikawiri mu pulogalamu ya C++ ndi momwe mungakonzere

Zolakwa Zofala mu C++ Programming ndi Momwe Mungakonzere

Mapulogalamu a C++ ndi amodzi mwa zilankhulo zamphamvu kwambiri komanso zosinthika pa mapulogalamu. Chifukwa cha kuthekera kwake kuthandizira mapulogalamu otsatira njira, olunjika pa chinthu, komanso odziwika bwino, C++ imagwiritsidwa ntchito kwambiri m'mapulogalamu osiyanasiyana, kuyambira machitidwe ogwiritsira ntchito mpaka mapulogalamu ochita masewera olimbitsa thupi apamwamba. Komabe, monga chilankhulo chilichonse chogwiritsira ntchito mapulogalamu, C++ ilinso ndi zolakwika zambiri zomwe opanga mapulogalamu, atsopano komanso odziwa zambiri, nthawi zambiri amakumana nazo. Nkhaniyi ikambirana zolakwika zina zodziwika bwino pa mapulogalamu a C++ ndikupereka malangizo amomwe mungakonzere.

1. Kugwiritsa Ntchito Malangizo Osagwiritsidwa Ntchito

Cholakwika:
Cholozera chosayambika chingaloze malo osadziwika a kukumbukira, zomwe zimayambitsa khalidwe losayembekezereka kapena kuwonongeka kwa pulogalamu. Chitsanzo cha cholakwika ichi ndi ichi:

“`cpp
int ptr; // ptr sinayambitsidwe
ptr = 10; // Cholakwika: pointer sinayambitsidwe
``

Momwe Mungakonzere:
Yambitsani pointer musanagwiritse ntchito. Mutha kuyiyambitsa ndi `nullptr` kapena ndi adilesi yokumbukira yolondola.

“`cpp
int ptr = nullptr; // Yambitsani ndi nullptr
mtengo wa int = 10;
ptr = &mtengo;
ptr = 20; // Tsopano ndi otetezeka
``

2. Zolakwika mu Memory Management (Memory Leak)

Cholakwika:
Kutaya kwa kukumbukira kumachitika pamene kukumbukira komwe kwaperekedwa sikutulutsidwanso. Izi zingayambitse pulogalamu kugwiritsa ntchito kukumbukira kochulukirapo pakapita nthawi, zomwe pamapeto pake zimapangitsa kuti kukumbukira kuchepe.

“`cpp
int ptr = int yatsopano [10];
// Iwalani kuchotsa memori yomwe yaperekedwa
``

Momwe Mungakonzere:
Nthawi zonse onetsetsani kuti mwamasula memori yogawidwa pogwiritsa ntchito `delete` kapena `delete[]` kutengera zomwe zagwiritsidwa ntchito pogawa.

“`cpp
int ptr = int yatsopano [10];
// Kugwiritsa ntchito kukumbukira…
chotsani[] ptr; // Memory yoperekedwa kwaulere
``

Gwiritsani ntchito laibulale ya ma smart pointers (monga `std::unique_ptr` kapena `std::shared_ptr`) kuti muchepetse kugwiritsa ntchito kukumbukira.

“`cpp
onjezerani

std::unique_ptr ptr(int yatsopano[10]);
// Memory idzatulutsidwa yokha ptr ikatuluka mu scope
``

3. Zolakwa Pogwiritsa Ntchito Maumboni

Cholakwika:
Kubwezera chizindikiro kapena cholozera ku chosinthika chapafupi chomwe chapita kutali kungayambitse khalidwe losayembekezereka.

“`cpp
int& getReference() {
mtengo wa int = 10;
mtengo wobwezera; // Cholakwika: kubwezeretsa referensi ku variable yakomweko
}
``

Momwe Mungakonzere:
Pewani kubwereza maumboni ku ma variable a m'deralo. M'malo mwake, gwiritsani ntchito ma variable osasinthasintha, kapena bwino kwambiri, bwezerani ma values, kapena ganizirani kugwiritsa ntchito zinthu.

“`cpp
int getValue() {
mtengo wa int = 10;
mtengo wobwezera; // Wotetezeka
}
``

4. Musanyalanyaze Mauthenga ndi Machenjezo Olakwika a Compiler

Cholakwika:
Opanga mapulogalamu nthawi zambiri amanyalanyaza mauthenga olakwika ndi machenjezo operekedwa ndi wopanga mapulogalamu, ngakhale kuti mauthengawa amapereka chidziwitso chofunikira chokhudza zolakwika zomwe zingachitike.

Momwe Mungakonzere:
Nthawi zonse yang'anani ndikumvetsetsa mauthenga ndi machenjezo olakwika omwe apangidwa ndi compiler. Yambitsani machenjezo apamwamba kuti muwonetsetse kuti ma code ndi abwino.

Mwachitsanzo mu GCC, gwiritsani ntchito mbendera ya `-Wall` kuti mupange machenjezo ambiri.

“`bash
g++ -Wall -o pulogalamu main.cpp
``

5. Cholakwika pa Kukweza Kwambiri kwa Opaleshoni

Cholakwika:
Kuchuluka kwa wogwiritsa ntchito molakwika kungayambitse zolakwika zosayembekezereka kapena nthawi yogwirira ntchito.

“`cpp
kalasi Yanga {
anthu onse:
deta ya int;
Woyendetsa MyClass+ (const MyClass& zina) {
bwezerani deta + zina.data; // Cholakwika: iyenera kubweza MyClass
}
};
``

Momwe Mungakonzere:
Onetsetsani kuti wogwiritsa ntchito wodzaza kwambiri wabweza mtundu woyenera ndikusunga zinthu zosasinthika za kalasi.

“`cpp
kalasi Yanga {
anthu onse:
deta ya int;
Woyendetsa MyClass+ (const MyClass& zina) {
Zotsatira za MyClass;
zotsatira.data = deta + deta ina;
kubweza zotsatira; // Kubweza chinthu kuchokera ku MyClass
}
};
``

6. Kugwiritsa Ntchito Molakwika Macros

Cholakwika:
Ma Macro nthawi zina amagwiritsidwa ntchito mopitirira muyeso kapena molakwika, zomwe zingayambitse zolakwika zomwe zimakhala zovuta kuzizindikira panthawi yogwira ntchito.

“`cpp
fotokozani SQUARE(x) xx

zotsatira za int = SQUARE(5 + 1); // Cholakwika: zotsatira zake ndi 5 + 1 5 + 1
``

Momwe Mungakonzere:
Sinthani ma macros ndi ma expression kapena ma templates kuti mukhale otetezeka komanso owongolera bwino.

“`cpp
Chinsinsi
T sikweya (T x) {
bwererani xx;
}

zotsatira za int = sikweya (5 + 1); // Zotetezeka kugwiritsa ntchito
``

7. Kugwiritsa Ntchito Molakwika Ntchito za C-style

Cholakwika:
Kugwiritsa ntchito ma function a C-style monga `strcpy` kapena `sprintf` omwe ali pachiwopsezo cha buffer overflow.

“`cpp
char src[] = "Moni, Dziko!";
char dest[5];
strcpy(dest, src); // Cholakwika: kufufuma kwa buffer
``

Momwe Mungakonzere:
Gwiritsani ntchito ntchito zotetezeka za C++ monga `std::string` kapena `std::vector`.

“`cpp
onjezerani
std::string src = “Moni, Dziko!”;
std::string dest = src;
``

8. Kunyalanyaza Kuzindikira Zolakwika

Cholakwika:
Musanyalanyaze kufufuza zolakwika pa ntchito za I/O kapena ntchito zomwe zingalephereke.

“`cpp
std::fayilo ya ifstream ("data.txt");
// Cholakwika: sindinayang'ane ngati fayilo yatsegulidwa bwino
``

Momwe Mungakonzere:
Nthawi zonse onani ngati ntchitoyo yayenda bwino ndipo chitani zolakwika moyenera.

“`cpp
std::fayilo ya ifstream ("data.txt");
ngati (!fayilo) {
std::cerr << “Yalephera kutsegula fayilo” << std::endl;
bwerani 1;
}
``

9. Kugwiritsa Ntchito Lupu Yosakwanira

Cholakwika:
Kugwiritsa ntchito ma loops osakwanira kungayambitse kuchepa kwa magwiridwe antchito a pulogalamu.

“`cpp
kwa (int i = 0; i <vec.size(); i++) {
// Njira ndi vec[i]
// Cholakwika: kukula () kumayitanidwa pa nthawi iliyonse yobwerezabwereza
}
``

Momwe Mungakonzere:
Konzani ma loops mwa kuchepetsa kuyitana kwa ntchito mobwerezabwereza.

“`cpp
kwa (std::size_t i = 0, n = vec.size(); i < n; i++) {
// Njira ndi vec[i]
}
``

Gwiritsaninso ntchito ma algorithms a STL monga `std::for_each` kuti muwonjezere kukhathamiritsa.

“`cpp
onjezerani
std::for_each(vec.begin(), vec.end(), [](int &value) {
// Njira yokhala ndi phindu
});
``

10. Cholakwika pa Kusamalira Ulusi

Cholakwika:
Kusasinthasintha kwa ulusi kungayambitse mikhalidwe ya mpikisano kapena kusagwirizana.

“`cpp
kuphatikiza void run() {
// Cholakwika: Mkhalidwe wa mpikisano ungachitike
}

std::ulusi t1(kuthamanga);
std::ulusi t2(kuthamanga);
``

Momwe Mungakonzere:
Gwiritsani ntchito zinthu zoyambirira monga ma mutexes kuti mupewe mikhalidwe ya mpikisano ndi zovuta.

“`cpp
phatikizani kuphatikiza

std::mutex mtx;

opanda kuthamanga () {
std::lock_guard lock(mtx);
// Njira yomwe ndi yotetezeka ku mikhalidwe ya mpikisano
}

std::ulusi t1(kuthamanga);
std::ulusi t2(kuthamanga);

t1.join();
t2.join();
``

Mapeto

C++ ndi chilankhulo champhamvu komanso chosinthasintha cha mapulogalamu, koma chimakhalanso ndi zolakwika zofala, makamaka zokhudzana ndi kasamalidwe ka kukumbukira ndi pointer. Mukamvetsetsa zolakwikazi ndikudziwa momwe mungakonzere, mutha kupanga mapulogalamu odalirika komanso ogwira ntchito bwino. Kumbukirani nthawi zonse kulabadira mauthenga a compiler, kugwiritsa ntchito zida zamakono zomwe zimakuthandizani kulemba ma code otetezeka , ndikupitilizabe kukulitsa luso lanu pakumvetsetsa ndikugwiritsa ntchito njira zabwino kwambiri zolembera mapulogalamu a C++.

Siyani ndemanga