Yleiset ajonaikaiset virheet
Opitte tunnistamaan ja ehkäisemään segmentointivirheitä, puskuriylivuotoja ja muistivuotoja.
Yleiset ajonaikaiset virheet on ilmainen C Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/3. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu C Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C Academy-kurssilla on yhteensä 3 oppituntia.
C-kielen yleiset suorituksenaikaiset virheet
Suorituksenaikaisia virheitä ilmenee, kun ohjelma joutuu odottamattomaan tilanteeseen, joka usein aiheuttaa kaatumisen.
Tässä oppitunnissa opitte:
- Miten segmentointivirheet syntyvät ja miten ne korjataan.
- Miten puskuriylivuodot aiheuttavat tietoturva-aukkoja.
- Miten muistivuodot vaikuttavat suorituskykyyn ja miten niitä vältetään.

Mikä on segmentointivirhe?
Segmentointivirhe syntyy, kun ohjelma yrittää käyttää muistia, johon sillä ei ole käyttöoikeutta.
Syitä:
- Alustamattoman tai NULL-osoittimen dereferointi.
- Taulukon rajojen ulkopuolisen muistin käyttäminen.
- Vain luku -muistin muuttaminen.
Esimerkki: segmentointivirhe
Tämä ohjelma aiheuttaa segmentointivirheen dereferoimalla NULL-osoittimen.
#include <stdio.h>
int main() {
int *ptr = NULL;
printf("%d\n", *ptr); // Segmentation fault
return 0;
}Segmentointivirheiden estäminen
Vinkkejä segmentointivirheiden välttämiseen:
- Alustakaa osoittimet aina ennen niiden käyttöä.
- Tarkistakaa ennen dereferointia, onko osoitin NULL.
- Tarkistakaa taulukon rajat.
Mikä on puskuriylivuoto?
Puskuriylivuoto syntyy, kun data ylittää sille varatun muistialueen koon.
Esimerkki:
char arr[5]; gets(arr);
Tämä voi johtaa odottamattomaan toimintaan ja tietoturva-aukkoihin.
Esimerkki: puskuriylivuoto
Tämä ohjelma havainnollistaa puskuriylivuotoa käyttämällä gets()-funktiota.
#include <stdio.h>
int main() {
char buffer[5];
printf("Enter a string: ");
gets(buffer); // Unsafe, may cause buffer overflow
printf("You entered: %s\n", buffer);
return 0;
}Puskuriylivuotojen estäminen
Voitte estää puskuriylivuodot seuraavasti:
- Käyttäkää
gets()-funktion sijaanfgets()-funktiota. - Vahvistakaa syötteen koko ennen taulukoihin kirjoittamista.
- Käyttäkää muistiturvallisia funktioita, kuten
snprintf()-funktiota.
Muistivuodot
Muistivuoto syntyy, kun varattua muistia ei vapauteta, mikä johtaa muistin tuhlaantumiseen.
Syitä:
- Unohdetaan käyttää
free()-funktiotamalloc()-funktion jälkeen. - Osoitin korvataan uudella osoittimella vapauttamatta vanhaa muistivarausta.
Yhteenveto
Tässä oppitunnissa opitte:
- Miten segmentointivirheet syntyvät ja miten niitä estetään.
- Miten puskuriylivuodot aiheuttavat tietoturvaongelmia.
- Miten muistivuodot tuhlaavat järjestelmän resursseja.
Seuraavaksi tutustumme C-kielen poikkeustenkäsittelystrategioihin!

Opi C tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 39
- Oppitunnit
- 144
Usein kysytyt kysymykset
Onko oppitunti ”Yleiset ajonaikaiset virheet” ilmainen?
Kyllä – oppitunnin ”Yleiset ajonaikaiset virheet” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko C Academy-kurssin, päivitä CoddyKit PROhon. C Academy-kurssilla on yhteensä 3 oppituntia.
Mitä opin oppitunnilla ”Yleiset ajonaikaiset virheet”?
Opitte tunnistamaan ja ehkäisemään segmentointivirheitä, puskuriylivuotoja ja muistivuotoja. Harjoittelet C Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni C Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin C Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/3.
Kuinka kauan ”Yleiset ajonaikaiset virheet”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä C Academy-oppitunnilla?
Kyllä. Jokainen C Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Vianmääritys GDB:llä
- Yleiset ajonaikaiset virheet
- Poikkeustenkäsittely C:ssä