C Academy · leksjon

Vanlige kjøretidsfeil

Identifiser og unngå segmenteringsfeil, bufferoverskridelser og minnelekkasjer.

Leksjon 2 av 310 trinn

Vanlige kjøretidsfeil er en gratis leksjon i C Academy på CoddyKit. Dette er leksjon 2 av 3. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i C Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i C Academy inneholder totalt 3 leksjoner.

Vanlige kjøretidsfeil i C

Kjøretidsfeil oppstår når et program får uventet oppførsel, og fører ofte til krasj.

I denne leksjonen lærer du:

  • Hvordan segmenteringsfeil oppstår, og hvordan de kan løses.
  • Hvordan bufferoverskridelser fører til sikkerhetssårbarheter.
  • Hvordan minnelekkasjer påvirker ytelsen, og hvordan de kan unngås.
Vanlige kjøretidsfeil — illustrasjon 1

Hva er en segmenteringsfeil?

En segmenteringsfeil oppstår når et program prøver å få tilgang til minne det ikke har tillatelse til å bruke.

Årsaker:

  • Dereferering av en uinitialisert eller NULL-peker.
  • Tilgang til minne utenfor grensene til en tabell.
  • Endring av skrivebeskyttet minne.

Eksempel: Segmenteringsfeil

Dette programmet forårsaker en segmenteringsfeil ved å dereferere en NULL-peker.

#include <stdio.h>

int main() {
    int *ptr = NULL;
    printf("%d\n", *ptr); // Segmentation fault
    return 0;
}

Forhindre segmenteringsfeil

Tips for å unngå segmenteringsfeil:

  • Initialiser alltid pekere før de brukes.
  • Kontroller om en peker er NULL før den derefereres.
  • Kontroller grensene for tabeller.

Hva er en bufferoverskridelse?

En bufferoverskridelse oppstår når data overskrider den tildelte minneplassen.

Eksempel:

char arr[5]; gets(arr);

Dette kan føre til uforutsigbar oppførsel og sikkerhetssårbarheter.

Eksempel: Bufferoverskridelse

Dette programmet demonstrerer en bufferoverskridelse ved hjelp av gets().

#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;
}

Forhindre bufferoverskridelser

Slik forhindrer du bufferoverskridelser:

  • Bruk fgets() i stedet for gets().
  • Valider størrelsen på inndata før du skriver til tabeller.
  • Bruk minnesikre funksjoner som snprintf().

Minnelekkasjer

En minnelekkasje oppstår når tildelt minne ikke frigjøres, noe som fører til sløsing med minne.

Årsaker:

  • Glemme å bruke free() etter malloc().
  • Overskrive en peker uten å frigjøre den gamle tildelingen.

Oppsummering

I denne leksjonen lærte du:

  • Hvordan segmenteringsfeil oppstår, og hvordan de kan forhindres.
  • Hvordan bufferoverskridelser fører til sikkerhetsproblemer.
  • Hvordan minnelekkasjer sløser med systemressurser.

Deretter skal vi se på strategier for unntakshåndtering i C!

Vanlige kjøretidsfeil — illustrasjon 10
Gratis å komme i gang

Lær deg C med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
39
Leksjoner
144

Ofte stilte spørsmål

Er leksjonen «Vanlige kjøretidsfeil» gratis?

Ja – hele teksten i «Vanlige kjøretidsfeil» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av C Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i C Academy inneholder totalt 3 leksjoner.

Hva lærer jeg i «Vanlige kjøretidsfeil»?

Identifiser og unngå segmenteringsfeil, bufferoverskridelser og minnelekkasjer. Du øver på C Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med C Academy?

Ingen tidligere erfaring er nødvendig. C Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 3.

Hvor lang tid tar leksjonen «Vanlige kjøretidsfeil»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne C Academy-leksjonen?

Ja. Alle C Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Feilsøking med GDB
  2. Vanlige kjøretidsfeil
  3. Unntakshåndtering i C
← Tilbake til C Academy