Alokacja struktury wewnątrz struktury

0
typedef struct {
	int *llst;
} arr2;

typedef struct {
	arr2 **table;
} arr;


arr *lista = (arr *)malloc(sizeof(arr));      // alokacja 1 strutury arr
lista->table = (arr2 **)malloc(sizeof(arr2)); // alokacja 2 struktury
int tablex[] = { 10 };                        // tablica z 1 elementem który ma być przypisany do struct arr2
lista->table[0] = (arr2 *)malloc(2);          // alokacja 2 tablicy czyli arr2
lista->table[0]->llst = tablex;               // przypisanie tablicy tablex do llst w struct 2 

Czy poprawnie alokuje pamięć?

0

Jeśli to C++ to nie: https://dsp.krzaq.cc/post/176/ucze-sie-cxx-kiedy-uzywac-new-i-delete/

Poza tym, alokujesz błędne wielkości. Użyj std::unique_ptr i std::vector.

0

Dopiero zaczynam właśnie z strukturami i co jakiś czas program potrafi scrashować i nadpisać pamięć innej zmiennej.
A jak mógłbym zaalokować pamięć w C? Głównie w tym staram się programować.

1

W C jesteś zmuszony do użycia malloc lub podobnych jemu funkcji. Ale temat jest o C++, zgodnie z tagami.

Ok, to teraz:

// to jest ok (cast jest zbędny w C)
arr *lista = (arr *)malloc(sizeof(arr));      // alokacja 1 strutury arr
// błąd - alokujesz tablicę wskaźników, więc powinieneś alokować sizeof wskaźnika
lista->table = (arr2 **)malloc(sizeof(arr2)); // alokacja 2 struktury
// ok, ale to proszenie się o kłopoty na dłuższą metę
int tablex[] = { 10 };                        // tablica z 1 elementem który ma być przypisany do struct arr2
// malloc 2? błąd
lista->table[0] = (arr2 *)malloc(2);          // alokacja 2 tablicy czyli arr2
// ok, ale to proszenie się o kłopoty na dłuższą metę
lista->table[0]->llst = tablex;               // przypisanie tablicy tablex do llst w struct 2 
0
	arr *lista = malloc(sizeof(arr));

	int tablex1[] = { 0, 1, 2, 3 };
	int tablex2[] = { 3, 2, 1, 0 };

	lista->table[0] = malloc(sizeof(tablex1) / sizeof(*tablex1));
	lista->table[0]->llst = tablex1;

	lista->table[1] = malloc(sizeof(tablex2) / sizeof(*tablex2));
	lista->table[1]->llst = tablex2;

Czyli mniej więcej tak? Staram się zrozumieć nigdy z strukturami nie miałem do czynienia. A o strukturach wewnątrz struktury nic nie znalazłem.

0

Może napisz co chcesz osiągnąć, bo to co robisz niewiele ma sensu. Chyba że po prostu "ćwieczysz wskaźniki"

0
typedef struct {
    void *ListaTablicy;
} Struktura2;

typedef struct {
    int LiczbaElementow;
    Struktura2**Tablica;
} Struktura1;

Mam taką strukture i nie moge jej zmieniać jedynie mam pisać na jej podstawie kod.
No i staram się zaalokować 1 strukturę i druga struktura jest tak jakby tablicą.
Po liczbie elementów wie ile razy ma odczytać 2 tablicę, druga tablica działa na podstawie pętli for i do niej wpisuje tablicę a raczej wskaźnij tej tablicy.

void ss(Struktura1 **tablica) {
	Struktura1 *lista = (Struktura1 *)malloc(sizeof(Struktura1));

	int tablica1[] = { 0, 1, 2, 3 };
	int tablica2[] = { 3, 2, 1, 0 };

        for (int i = 0; i <= 2; i++) {
	      lista->Tablica[i] = (Struktura2 *)malloc(sizeof(tablica2) / sizeof(*tablica2));
	      lista->Tablica[i]->ListaTablicy = tablica2;
       }
       *tablica = lista;
}
0

ListaTablicy ma bardzo niejasną nazwę, co to ma być?

Jak to jakieś zadanie na studia czy coś to podaj jego treść

0

To nie żadne zadanie, po prostu własny projekt.
ListaTablicy tutaj ma alokować pamięć i przypisywać tablicę ale ma być widoczna globalnie?

lista->Tablica; Tego nie trzeba zaalokować jeśli ma przypisać 2 tablice? Jeśli przypisuję do niego elementy.

Przy wywołaniu funkcji ss ma dostęp do tych dwóch tablic; pod tą strukturą.

0

Jak własny projekt to dlaczego nie możesz zmienić?

Mam taką strukture i nie moge jej zmieniać jedynie mam pisać na jej podstawie kod.

Ta struktura nie wydaje się mieć sensu z Twojego opisu. Opisz słownie co chcesz/masz zrobić.

0

Po prostu nie moge jej zmienić struktura tak musi wyglądać.
Mi bardziej zależy żeby nie było wycieków pamięci i czy poprawnie alokuję pamięć do tej okropnej struktury.
Wskaźników tyle ma być :P

Po prostu ma te 2 tablice wrzucić do tej Struktury2 a ma być ona widoczna z Struktury1 nie wiem jak to łatwiej wytłumaczyć
Ilość tablic zna poprzez Strukture1 bo do niej zapisuje ile ich zapisał do Strutura2.

2
wdfan napisał(a):

Mam taką strukture i nie moge jej zmieniać jedynie mam pisać na jej podstawie kod.

wdfan napisał(a):

To nie żadne zadanie, po prostu własny projekt.

WTF?

2

Jeśli chcesz pisać w C, to nie kompiluj tego jako C++.
Zmień nazwę pliku żeby miał rozszerzenie .c

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