C Academy · Lektion

Almindelige runtime-fejl

Identificér og forebyg segmentation faults, buffer-overløb og memory leaks

Lektion 2 af 310 trin

Almindelige runtime-fejl er en gratis C Academy-lektion på CoddyKit. Dette er lektion 2 af 3. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i C Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C Academy-kurset indeholder 3 lektioner i alt.

Almindelige kørselsfejl i C

Kørselsfejl opstår, når et program støder på uventet adfærd, som ofte får det til at gå ned.

I denne lektion lærer du:

  • Hvordan segmenteringsfejl opstår, og hvordan du retter dem.
  • Hvordan bufferoverløb fører til sikkerhedssårbarheder.
  • Hvordan hukommelseslækager påvirker ydeevnen, og hvordan du undgår dem.
Almindelige runtime-fejl — illustration 1

Hvad er en segmenteringsfejl?

En segmenteringsfejl opstår, når et program forsøger at få adgang til hukommelse, som det ikke har tilladelse til at tilgå.

Årsager:

  • Dereferering af en ikke-initialiseret eller NULL-peger.
  • Adgang til hukommelse uden for et arrays grænser.
  • Ændring af skrivebeskyttet hukommelse.

Eksempel: Segmenteringsfejl

Dette program forårsager en segmenteringsfejl ved at dereferere en NULL-peger.

#include <stdio.h>

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

Forebyggelse af segmenteringsfejl

Tip til at undgå segmenteringsfejl:

  • Initialisér altid pegere, før du bruger dem.
  • Kontrollér, om en peger er NULL, før du derefererer den.
  • Brug kontrol af arraygrænser.

Hvad er et bufferoverløb?

Et bufferoverløb opstår, når data overskrider den tildelte hukommelsesplads.

Eksempel:

char arr[5]; gets(arr);

Det kan føre til uforudsigelig adfærd og sikkerhedssårbarheder.

Eksempel: Bufferoverløb

Dette program demonstrerer et bufferoverløb ved hjælp af 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;
}

Forebyggelse af bufferoverløb

Sådan forebygger du bufferoverløb:

  • Brug fgets() i stedet for gets().
  • Validér inddataenes størrelse, før du skriver til arrays.
  • Brug hukommelsessikre funktioner som snprintf().

Hukommelseslækager

En hukommelseslækage opstår, når tildelt hukommelse ikke frigives, hvilket fører til spild af hukommelse.

Årsager:

  • At du glemmer at bruge free() efter malloc().
  • At du overskriver en peger uden at frigive den gamle tildeling.

Opsummering

I denne lektion har du lært:

  • Hvordan segmenteringsfejl opstår, og hvordan du forebygger dem.
  • Hvordan bufferoverløb fører til sikkerhedsproblemer.
  • Hvordan hukommelseslækager spilder systemressourcer.

Dernæst undersøger vi strategier til undtagelseshåndtering i C!

Almindelige runtime-fejl — illustration 10
Gratis at komme i gang

Lær C med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
39
Lektioner
144

Ofte stillede spørgsmål

Er lektionen “Almindelige runtime-fejl” gratis?

Ja — hele teksten til “Almindelige runtime-fejl” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af C Academy-kurset, skal du opgradere til CoddyKit PRO. C Academy-kurset indeholder 3 lektioner i alt.

Hvad lærer jeg i “Almindelige runtime-fejl”?

Identificér og forebyg segmentation faults, buffer-overløb og memory leaks Du øver dig i C Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på C Academy?

Der kræves ingen tidligere erfaring. C Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 3.

Hvor lang tid tager lektionen “Almindelige runtime-fejl”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne C Academy-lektion?

Ja. Alle C Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Fejlfinding med GDB
  2. Almindelige runtime-fejl
  3. Exception handling i C
← Tilbage til C Academy