C Academy · Oppitunti

Yleiset ajonaikaiset virheet

Opitte tunnistamaan ja ehkäisemään segmentointivirheitä, puskuriylivuotoja ja muistivuotoja.

Oppitunti 2/310 vaihetta

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.
Yleiset ajonaikaiset virheet — kuvitus 1

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 sijaan fgets()-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()-funktiota malloc()-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!

Yleiset ajonaikaiset virheet — kuvitus 10
Aloita maksutta

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

  1. Vianmääritys GDB:llä
  2. Yleiset ajonaikaiset virheet
  3. Poikkeustenkäsittely C:ssä
← Takaisin: C Academy