Basis van programmeren in C

Welke combinatie van de levensduur van (1) een lokale variabele die binnen een functie zonder static is gedeclareerd, (2) een met malloc gereserveerd gebied en (3) een variabele die buiten elke functie is gedeclareerd, is in C juist?

  1. A(1) tot het programma eindigt, (2) tot de functie die het heeft gereserveerd terugkeert, (3) tot het programma eindigt
  2. B(1) tot de uitvoering het blok verlaat waarin ze is gedeclareerd, (2) tot het met free wordt vrijgegeven, (3) tot het programma eindigt
  3. C(1) tot de uitvoering het blok verlaat waarin ze is gedeclareerd, (2) tot het programma eindigt (eerder vrijgeven is niet mogelijk), (3) tot de functie die haar als eerste gebruikte terugkeert
Antwoord en toelichting tonen

Antwoord: B. (1) tot de uitvoering het blok verlaat waarin ze is gedeclareerd, (2) tot het met free wordt vrijgegeven, (3) tot het programma eindigt

De automatische variabele in (1) staat in het algemeen op de stack; ze wordt aangemaakt bij het binnengaan van het blok waarin ze is gedeclareerd en verdwijnt als de uitvoering dat blok verlaat. Het met malloc gereserveerde gebied in (2) staat op de heap; het blijft bestaan na het terugkeren uit functies en kan worden gebruikt tot het met free wordt vrijgegeven. De variabele buiten elke functie in (3) (en elke variabele met static) bestaat gedurende de hele uitvoering van het programma en staat in een statisch gebied zoals .data of .bss. Een pointer gebruiken naar een gebied waarvan de levensduur is afgelopen, en free vergeten zodat gebieden zich blijven opstapelen, zijn veelvoorkomende oorzaken van bugs.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Basis van programmeren in C

  1. int is 32 bits (maximum 2147483647). Wat is de grootste n waarvoor de bovenstaande functie fact(n) de faculteit van n correct en zonder overloop teruggeeft?
  2. int is 4 bytes en een pointer is 8 bytes. Als de waarde (het adres) van een pointer p naar int 0x1000 is, wat is dan de waarde van p + 3?
  3. int is 4 bytes en een pointer is 8 bytes. Wat is de uitvoer als het bovenstaande programma wordt uitgevoerd?
  4. int is 4 bytes. Wat is de uitvoer als de bovenstaande code wordt uitgevoerd?
  5. Wat is de uitvoer als de bovenstaande code met een char-array die een string bevat, wordt uitgevoerd?