[C] Sprawdzenie inicjalizacji stosu

Chungu
Użytkownik
Użytkownik
Posty: 121
Rejestracja: 21 paź 2016, o 20:57
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 42 razy

[C] Sprawdzenie inicjalizacji stosu

Post autor: Chungu » 21 paź 2017, o 15:13

Witam.

Piszę sobie implementację stosu w C i napotkałem pewien problem (możliwe, że chcę zbyt "dobrze" zabezpieczyć mój program). Otóż mam stos przechowujący liczby typu int w formie dynamicznej tablicy oraz "konstruktor" jako funkcję init, która owy stos inicjalizuje. Jest to mniej więcej coś takiego:

Kod: Zaznacz cały

 
struct Stack{
	int*data;
	long size;		
	long top;		
};
void init(struct Stack*s){
//.....
}
Zacząłem się zastanawiać czy istnieje jakaś możliwość na poprawne zareagowanie na np. niepotrzebna ponowna inicjalizacje czyli coś takiego:

Kod: Zaznacz cały

int main(){
struct Stack stack;
init(&stack);
init(&stack); //nadmiarowa inicjalizacja - blad
}
Chciałbym również sprawdzać czy w funkcjach takich jak push, pop obiekt został poprawnie zainicjalizowany... stąd moje pytanie... Problem polega na tym, że w C ( z tego co mi wiadomo) nie ma czegoś takiego jak inicjalizacja wskaźnika pewną wartością domyślną (chociaż Nullem)...
Dzięki za pomoc.

Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

Re: [C] Sprawdzenie inicjalizacji stosu

Post autor: Afish » 21 paź 2017, o 17:38

Musiałbyś sprawdzić, czy wszystkie pola stosu mają wartości uważane za sensowne.
Wskaźnik jako zmienna lokalna nie jest inicjalizowany, w innych przypadkach jest nullem.

bartek118
Gość Specjalny
Gość Specjalny
Posty: 5970
Rejestracja: 28 lut 2010, o 19:45
Płeć: Mężczyzna
Lokalizacja: Toruń
Podziękował: 15 razy
Pomógł: 1251 razy

Re: [C] Sprawdzenie inicjalizacji stosu

Post autor: bartek118 » 21 paź 2017, o 18:13

Wypadałoby też w danym elemencie stosu mieć wskaźnik na kolejny element.

Chungu
Użytkownik
Użytkownik
Posty: 121
Rejestracja: 21 paź 2016, o 20:57
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 42 razy

Re: [C] Sprawdzenie inicjalizacji stosu

Post autor: Chungu » 22 paź 2017, o 15:50

Dzięki, czyli podsumowując, nie da się tego zrobić?

Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

Re: [C] Sprawdzenie inicjalizacji stosu

Post autor: Afish » 22 paź 2017, o 20:25

Dać się da z dokładnością do tego, że jeżeli ktoś będzie chciał, to i tak to obejdzie. Najprościej jest sprawdzać, czy stos znajduje się w dobrym obszarze pamięci (czy masz pozwolenie na odczyt stron pamięci) i potem weryfikować sensowność wartości, ale jak komuś będzie zależało, to i tak ręcznie podmieni co trzeba i zainicjalizuje drugi raz. Nie ma co przesadnie kombinować, jakaś prosta heurystyka wystarczy w większości przypadków.

ODPOWIEDZ