Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Rakenteiden Dynaaminen Varaaminen | Osoittimien ja Rakenteiden Käsittely
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
C-Rakenteiden Hallinta

bookRakenteiden Dynaaminen Varaaminen

Kerrataan, miten muistia varataan dynaamisesti C-kielessä.

Muistin varaamiseen keosta käytetään malloc()-funktiota, joka löytyy stdlib.h-kirjastosta:

<pointer> = (data_type*)malloc(n * sizeof(data_type));
Note
Huom

Kun varaat muistia dynaamisesti ohjelmassasi, muisti pysyy varattuna, kunnes vapautat sen erikseen käyttämällä free()-funktiota.

main.c

main.c

copy
12345678910111213141516171819
#include <stdio.h> #include <stdlib.h> // structure definition struct Example { int someValue[20]; // int = 4 bytes, 20 * 4 = 80 bytes }; int main() { // allocating memory for Example structure struct Example* pExample = (struct Example*)malloc(sizeof(struct Example)); printf("Allocating memory = %zu bytes\n", sizeof(*pExample)); // freeing memory free(pExample); return 0; }

Jos rakenne sisältää useita kenttiä eri tietotyypeillä, kääntäjä tasaa kenttien koot niin, että rakenne voidaan tallentaa muistiin "sopivasti".

Kun tehtävä on suoritettu, kiinnitä huomiota siihen, kuinka monta tavua rakenteelle, jossa on int- ja char-kentät, varataan. Tätä ilmiötä käsitellään tarkemmin myöhemmin tällä kurssilla.

Tehtävä

Swipe to start coding

Sinun tulee luoda Student-rakenne ja varata sille dynaamisesti muistia käyttämällä malloc()-funktiota.
Tehtävänäsi on alustaa rakenne esimerkkitiedoilla ja palauttaa osoitin siihen.

createStudent-funktion sisällä:

  1. Käytä malloc()-funktiota varataksesi muistia yhdelle Student-rakenteelle.
  2. Tarkista, onnistuiko varaus (jos ei, palauta NULL).
  3. Aseta oletusnimi käyttäen sprintf()-funktiota — esimerkiksi "Alice Johnson".
  4. Aseta arvo kenttään age, esimerkiksi 21.
  5. Aseta arvo kenttään gpa, esimerkiksi 3.85.
  6. Palauta osoitin varattuun rakenteeseen.

main-funktiossa:

  1. Käytä free()-funktiota vapauttaaksesi varatun muistin käytön jälkeen.

Ratkaisu

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 4
single

single

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

close

bookRakenteiden Dynaaminen Varaaminen

Pyyhkäise näyttääksesi valikon

Kerrataan, miten muistia varataan dynaamisesti C-kielessä.

Muistin varaamiseen keosta käytetään malloc()-funktiota, joka löytyy stdlib.h-kirjastosta:

<pointer> = (data_type*)malloc(n * sizeof(data_type));
Note
Huom

Kun varaat muistia dynaamisesti ohjelmassasi, muisti pysyy varattuna, kunnes vapautat sen erikseen käyttämällä free()-funktiota.

main.c

main.c

copy
12345678910111213141516171819
#include <stdio.h> #include <stdlib.h> // structure definition struct Example { int someValue[20]; // int = 4 bytes, 20 * 4 = 80 bytes }; int main() { // allocating memory for Example structure struct Example* pExample = (struct Example*)malloc(sizeof(struct Example)); printf("Allocating memory = %zu bytes\n", sizeof(*pExample)); // freeing memory free(pExample); return 0; }

Jos rakenne sisältää useita kenttiä eri tietotyypeillä, kääntäjä tasaa kenttien koot niin, että rakenne voidaan tallentaa muistiin "sopivasti".

Kun tehtävä on suoritettu, kiinnitä huomiota siihen, kuinka monta tavua rakenteelle, jossa on int- ja char-kentät, varataan. Tätä ilmiötä käsitellään tarkemmin myöhemmin tällä kurssilla.

Tehtävä

Swipe to start coding

Sinun tulee luoda Student-rakenne ja varata sille dynaamisesti muistia käyttämällä malloc()-funktiota.
Tehtävänäsi on alustaa rakenne esimerkkitiedoilla ja palauttaa osoitin siihen.

createStudent-funktion sisällä:

  1. Käytä malloc()-funktiota varataksesi muistia yhdelle Student-rakenteelle.
  2. Tarkista, onnistuiko varaus (jos ei, palauta NULL).
  3. Aseta oletusnimi käyttäen sprintf()-funktiota — esimerkiksi "Alice Johnson".
  4. Aseta arvo kenttään age, esimerkiksi 21.
  5. Aseta arvo kenttään gpa, esimerkiksi 3.85.
  6. Palauta osoitin varattuun rakenteeseen.

main-funktiossa:

  1. Käytä free()-funktiota vapauttaaksesi varatun muistin käytön jälkeen.

Ratkaisu

Switch to desktopVaihda työpöytään todellista harjoitusta vartenJatka siitä, missä olet käyttämällä jotakin alla olevista vaihtoehdoista
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 4
single

single

some-alt