Alokacja struktury wewnątrz struktury

Alokacja struktury wewnątrz struktury
WD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6
0
Kopiuj
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ęć?

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
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.

WD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6
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ć.

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
1

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

Ok, to teraz:

Kopiuj
// 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 
WD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6
0
Kopiuj
	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.

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
0

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

WD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6
0
Kopiuj
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.

Kopiuj
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;
}
kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
0

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

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

WD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6
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ą.

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
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ć.

WD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6
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.

tajny_agent
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1340
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?

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
2

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.