Jak odczytać rozmiar dynamicznej tablicy

0

Cześć, mam problem, zadeklarowałem sobie dynamiczną tablicę w ten sposób


float *tablica;
int rozmiar_p=/*tutaj przykładowa wartość*/;
tablica=(float*)malloc(rozmiar_p*sizeof(float));

i kiedy kończy mi się w niej miejsce to robię


rozmiar_p*=2;
float *pointer=(float*)realloc(tablica,rozmiar_p*sizeof(float));
tablica=pointer;

Chciałbym na końcu działania programu odczytać ile pamięci przydzieliłem do tej tablicy. Jak można to zrobić ?

0

Najlepiej byłoby stworzyć strukturę w której przechowywałbyś tą tablicę, pojemność i rozmiar. Taki pojemnik. Wystarczyłoby się odnieść tylko do wypisania wartości m_size

0

Nie da się tego zrobić prościej ? Jeżeli nie to mógłbyś mi pokazać jak coś takiego zrobić ? :)

1

dokładnie tyle przydzieliłeś: rozmiar_p*sizeof(float) (w bajtach)

0

Wiem, cały problem polega na tym, że mam napisać program, w którym za każdym razem kiedy jest przydzielana pamięć jest pokazywane właśnie rozmiar_psizeof(float), a na samym końcu (nie wiem w jaki sposób) jest ogólnie pokazywany rozmiar tablicy i prowadzący sprawdza, czy suma wszystkich rozmiar_psizeof(float) i rozmiar tej tablicy na końcu się zgadzają.

Ok sorry, źle zrozumiałem polecenie, rzeczywiście mogę zrobić to w sposób rozmiar_p*sizeof(float). :)

0

Chodziło mi o imitację pojemników w C++.
Zastanów się jeszcze nad definicją funkcji które mogą Ci się przydać np usuwanie wartości, przez co mniejsza się size

#include <stdio.h>
typedef struct
{
    int capacity;
    int size;
    float* tablica;
} CTab;

void init_tab(CTab* T, int cap)
{
    T->capacity = cap;
    T->size = 0;
    T->tablica = (float*)malloc(cap * sizeof(float));
}

void reinit_tab(CTab* T, int cap)
{
    int i;

    T->capacity = cap;
    float* temp;
    temp = (float*)malloc(T->capacity * sizeof(float));

    for(i = 0; i < T->size; ++i)
        temp[i] = T->tablica[i];

    free(T->tablica);

    T->tablica = temp;
}

void add_value(CTab* T, float val)
{
    if(T->capacity <= T->size)
        reinit_tab(T, T->capacity + 5);

    T->tablica[T->size] = val;
    T->size += 1;
}

void delete_tab(CTab* T)
{
    free(T->tablica);
}

int main()
{
        int i;
        CTab nowy;

        init_tab(&nowy, 3);
        add_value(&nowy, 3.0f);
        add_value(&nowy, 5.4f);
        add_value(&nowy, 5.3f);
        add_value(&nowy, 5.2f);
        add_value(&nowy, 5.1f);
        add_value(&nowy, 5.0f);

        for(i = 0; i < nowy.size; ++i)
            printf("%d. %f\n", i + 1, nowy.tablica[i]);

        printf("poj = %d\n", nowy.capacity);
        printf("roz = %d\n", nowy.size);

        delete_tab(&nowy);

        getchar();
        return 0;
}
0

Dzięki, ale to dla mnie jeszcze zbyt skomplikowane :D

0
MJay napisał(a)

Chodziło mi o imitację pojemników w C++.
Zastanów się jeszcze nad definicją funkcji które mogą Ci się przydać np usuwanie wartości, przez co mniejsza się size


#include <stdio.h>
typedef struct
{
int capacity;
int size;
float* tablica;
} CTab;

void init_tab(CTab T, int cap)
{
T->capacity = cap;
T->size = 0;
T->tablica = (float
)malloc(cap * sizeof(float));
}

void reinit_tab(CTab* T, int cap)
{
int i;

T->capacity = cap;
float* temp;
temp = (float*)malloc(T->capacity * sizeof(float));

for(i = 0; i < T->size; ++i)
    temp[i] = T->tablica[i];

free(T->tablica);

T->tablica = temp;

}

void add_value(CTab* T, float val)
{
if(T->capacity <= T->size)
reinit_tab(T, T->capacity + 5);

T->tablica[T->size] = val;
T->size += 1;

}

void delete_tab(CTab* T)
{
free(T->tablica);
}

int main()
{
int i;
CTab nowy;

    init_tab(&nowy, 3);
    add_value(&nowy, 3.0f);
    add_value(&nowy, 5.4f);
    add_value(&nowy, 5.3f);
    add_value(&nowy, 5.2f);
    add_value(&nowy, 5.1f);
    add_value(&nowy, 5.0f);

    for(i = 0; i < nowy.size; ++i)
        printf("%d. %f\n", i + 1, nowy.tablica[i]);

    printf("poj = %d\n", nowy.capacity);
    printf("roz = %d\n", nowy.size);

    delete_tab(&nowy);

    getchar();
    return 0;

}



trzymaj się jednej konwencji nazewnictwa. Albo nazywasz wszystko po nasymu albo po angielsku bo to zmieszane obleśnie wygląda.
0

Napiszę o tym bo możesz nie wiedzieć. Nie można odczytać rozmiaru tablicy dynamicznej ani żadnej w c. Innego sposobu niż zapamiętanie w jakiejś zmiennej nie ma.

0

@nieee, z ktorym językiem masz problemy? Rozumiem, że pisząc programy piszesz tylko w języku angielskim, a kiedy chcesz napisać program w jezyku polskim, to tworzysz makra, ktore zmienia choćby pętle for na dla, instrukcję if na jeżeli itd.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0