Usuwanie struct by nie zajmował pamięci

0
 struct pole{
	int ilosc;
	int maks;
};

Będę miał listę takich structow, wrzucając je:

pole x;
x.ilosc = 3;
x.maks = 4;
MojaLista[2] = x;

I takie pytanie, co sie dzieje gdy zrobie nowy struct i nadpisze w tej tablicy ten x? chodzi mi głównie o pamięć bo mam dostępne tylko 8mb.

3
pole x;
x.ilosc = 3;
x.maks = 4;
MojaLista[2] = x;

Bez sensu ten kod. Tworzysz obiekt, a następnie go kopiujesz do tablicy.
Jeśli tablica jest typu struct pole[], to obiekty istnieją w niej cały czas. Wystarczy wypełnić wartości:

MojaLista[2].ilosc = 3;
MojaLista[2].maks = 4;
3

Masz tablicę struktur, a nie wskaźników na struktury - zatem przypisanie MojaLista[2] = x; powoduje skopiowanie tej struktury do tablicy - w tym momencie staje się ona niezależna od pierwotnej zmiennej.
Można by to luźno przetłumaczyć na:

memcpy(&MojaLista[2], &x, sizeof(x));

Tak więc robiąc następne przypisanie pod dany element tablicy, nie masz żadnego wycieku danych (w tym konkretnym przypadku).

Na przykładzie:

void test() {
  // utworzenie struktury na stosie
  Pole p;

  // przypisanie danych do utworzonej struktury
  p.ilosc = 10;
  p.maks = 50;

  // skopiowanie wszystkich danych struktury do tablicy
  MojaLista[2] = p;

  // (automatycznie) usunięcie struktury ze stosu, bilans pamięciowy na zero
}

Przy czym ten sam kod można by skrócić do:

void test() {
  MojaLista[2].ilosc = 10;
  MojaLIsta[2].maks = 10;
}
1

Brak konkretów!
Opisz najpierw dokładnie jaki masz problem algorytmiczny. Może się okazać, że zamartwiasz się na zapas.
Z taką strukturą problem z pamięcią pojawi się jeśli twój wektor/tablica będzie miał rozmiar co najmniej rzędu 1e5.

0

Mam 3 tablice 5000 struktur.
Teraz w 5 tysiacach kroków musze dodawać jedną taką tablicę 5000 struktur ale pierwsza z 3 które posiadam nie jest mi już potrzebna wiec chciałbym ją "nadpisać"
Jednak zastanawiam sie czy nie stworze 5000*5000 struktur.

edit.

może lepszym pomyslem bedzie nie nadpisywanie tablicy struktur tylko edytowanie wartości struktur w tej tablicy tak by były nowymi strukturami?

edit 2

// skopiowanie wszystkich danych struktury do tablicy
  MojaLista[2] = p;
 
  // (automatycznie) usunięcie struktury ze stosu, bilans pamięciowy na zero 

A co sie dzieje ze strukturą która byla przed skopiowaiem p w MojaLista[2]?

1

Po nadpisaniu przez inną wartość każda poprzednia wartość zostaje utracona, niezależnie od tego czym jest ta wartość (pojedyncza składowa, struktura, wskaźnik - bez znaczenia), oraz niezależnie od tego gdzie ta wartość się znajdowała (w pojedynczej zmiennej, w tablice, w strukturze).

3
TrzyRazyCztery napisał(a):

Jednak zastanawiam sie czy nie stworze 5000*5000 struktur.

sizeof(pole)50005000=2e8
a ty masz pamięci 8e6, no to teraz zgadnij czy to ma szansę powodzenia.

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