logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[C] Wykorzystanie malloc do alokacji pamięci dla zmiennej i sprawdzenie liczby pierwszej

szymon1051 25 Mar 2019 07:59 1494 4
REKLAMA
  • #1 17864926
    szymon1051
    Poziom 13  
    Posty: 676
    Pomógł: 5
    Ocena: 67
    Mam coś takiego:
    Stosując funkcję malloc() dokonaj alokacji pamięci dla zmiennej dynamicznej typu int. Następnie program ma sprawdzić, czy wczytana liczba jest liczbą pierwszą.

    Czyli mam najpierw za pomocą malloc "zarezerwować" adres w pamięci o danej wielkości a potem do niego przypisać wartość?

    Tym mówię że chce pomięć o wielkości int? Dlaczego przed malloc musi być w nawiasie typ z gwiazdką?
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod



    Rozwiązanie zadania (chyba).
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    [/img]
  • REKLAMA
  • #2 17864985
    hindoos
    Poziom 36  
    Posty: 3735
    Pomógł: 287
    Ocena: 656
    Dokładnie tak jak piszesz, malloc to rezerwacja pamięci (memory allocation). Nawias to rzutowanie - informujesz kompilator, że świadomie chcesz przypisać wynik działania funkcji malloc (która zwraca wskaźnik na void -
    http://www.cplusplus.com/reference/cstdlib/malloc/ ) do wskaźnika na int.
  • REKLAMA
  • #3 17865013
    ex-or
    Poziom 28  
    Posty: 785
    Pomógł: 147
    Ocena: 151
    W C rzutowanie wartości zwracanej przez malloc nie jest potrzebne, a nawet przez niektórych uważane za szkodliwe: https://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc W tym świetle wyrażenie wyglądało by tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #4 17865796
    szymon1051
    Poziom 13  
    Posty: 676
    Pomógł: 5
    Ocena: 67
    A jak tworze alokowaną tabele?
    Muszę podać ile będzie pamięci czyli ile razy wielkość jednego elementu tabeli?
    To jest
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    to samo co
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    tak?
    Bo w pierwszym wskaźnik jest zdeklarowany na int więc potem malloc bierze wielkość int (chyba 4 bajty), a w drugim mamy zapisane wprost że ma wziąć int i pomnożyć przez n.
    Czy jest jakaś różnica?


    Cały program
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #5 17866899
    hindoos
    Poziom 36  
    Posty: 3735
    Pomógł: 287
    Ocena: 656
    Bezpieczniej jest zrobić bez podawania typu bo jak zmienisz zdanie i stwierdzisz, że int to za mało i teraz będziesz używać 8-bajtowego long long to jest duża szansa, że nie poprawisz malloca i wszystko będzie działać do pewnego momentu aż nie przekroczysz połowy wielkości zadeklarowanej tablicy (jeśli deklarujesz naprzód) albo nadpiszesz jakieś inne dane w pamięci bo wyjedziesz poza dopuszczalny zakres.
REKLAMA