• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dynamiczna tablica dwuwymiarowa - C

Object Storage Arubacloud
0 głosów
8,010 wizyt
pytanie zadane 6 stycznia 2017 w C i C++ przez Astenna Początkujący (340 p.)
Czy wytłumaczy mi ktoś jak działa przydzialenia pamięci funkcją malloc w tym przypadku?
Wg materiałów, które mam dynamiczną tablice 2D definiuje się tak:

  int (*tablica)[x];
  tablica=(int(*)[x])malloc(x*y*sizeof(int));

gdzie x i y to wymiary tablicy.

Rozumiem, że pierwsza linijka to deklaracja wskaźnika na x elementową tablicę, ale co dzieje się potem?

2 odpowiedzi

0 głosów
odpowiedź 6 stycznia 2017 przez playerony Pasjonat (15,240 p.)
wybrane 6 stycznia 2017
 
Najlepsza

Myśle, że alkokacja pamięci zawarta w tym kodzie będzie bardziej przystępna dla Ciebie, jeżeli chodzi o zrozumienie:

#include <stdio.h>
#include <malloc.h>

using namespace std;

int main(void){
    // Deklaracja zmiennych
    int wier, col;
    int **tab;

    // Pobranie danych
    printf("Wiersze: ");
    scanf("%d", &wier);
    printf("\nKolumny: ");
    scanf("%d", &col);

    // Alokacja pamięci dla tablicy dwuwymiarowej
    tab=(int**)malloc(wier*sizeof(int*)); // alokacja pamięci dla wierszy
    for(int i=0; i<wier; i++)
        tab[i]=(int*)malloc(col*sizeof(int)); // alokacja pamięci dla kolumn

    // Przypisanie wartości
    for(int i=0 ; i<wier ; i++)
        for(int j=0 ; j<col ; j++)
            tab[i][j] = 5;

    // Wypisywanie wartości
    for(int i=0 ; i<wier ; i++){
        for(int j=0 ; j<col ; j++){
            printf("%d", tab[i][j]);
        }
        printf("\n");
    }

    // Czyszczenie pamięci
    for(int i=0; i<col; i++)
        free(tab[i]);
    free(tab);

    return 0;
}

 

komentarz 6 stycznia 2017 przez Astenna Początkujący (340 p.)

Faktycznie, tą wersję od razu potrafię zrozumieć :) Dziękuję!
Będę się jednak upierać przy tej obecnej, bo mam zadanie do wykonania, bo dalej mam do zrozumienia trudniejszy kod - deklarację takiej tablicy, korzystając ze struktur danych.


 

 

komentarz 9 marca 2021 przez Waran3 Początkujący (460 p.)

Jest problem z czyszczeniem pamięci jeśli liczba kolumn i wierszy jest różna.

0 głosów
odpowiedź 6 stycznia 2017 przez Astenna Początkujący (340 p.)
typedef struct {
int wymx, wymy;
void *piksel;
} t_obraz;          
int alokuj(t_obraz *obraz) {
...
fscanf(plik_we,"%d", &(obraz->wymx));  /* analogicznie wymy */
obraz->piksel=malloc(obraz->wymx*obraz->wymy*sizeof(int));
int (*piksel)[obraz->wymx]; 
piksel=(int(*)[obraz->wymx]) obraz->piksel;
...

Rozumiem, że:

1) Wczytanie wymiarów

2) Dynamiczna alokacja pamięci do obraz.piksele

3) Utworzenie pomocniczego wskaźniku na tablicę o rozmiarze wymx

4) ??

 

komentarz 6 stycznia 2017 przez niezalogowany
Jedno pytanie = jedno założone pytanie, zadaj kolejne jeżeli masz dotyczące innych rzeczy ;)

Podobne pytania

0 głosów
1 odpowiedź 552 wizyt
pytanie zadane 21 października 2017 w C i C++ przez Daaa22 Dyskutant (8,250 p.)
+1 głos
2 odpowiedzi 1,089 wizyt
pytanie zadane 15 kwietnia 2018 w C i C++ przez Stasq Nowicjusz (150 p.)
0 głosów
0 odpowiedzi 125 wizyt
pytanie zadane 28 stycznia 2022 w C i C++ przez danielch Użytkownik (660 p.)

92,554 zapytań

141,399 odpowiedzi

319,535 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...