[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 »

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 »

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
Użytkownik
Użytkownik
Posty: 5974
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 »

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 »

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 »

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