Skocz do zawartości

Zablokowane Nietypowa alokacja pamięci


Rudy

Rekomendowane odpowiedzi

Witam.

 

Krótko i zwięźle, jest taki kod:

// gdzieś w main
unsigned int i;
// pobranie do i liczby naturalnej wpisanej przez użytkownika
char str = new char[i];
// coś tam
delete[] str;
return 0;

wiemy, że i >= 0 (co wynika z typu). Jak i > 0 to ok, alokujemy pamięć. Ale co jak i = 0? Czy alokowanie 0 bajtów wywoła błąd?

Odnośnik do komentarza
Udostępnij na innych stronach

U mnie nie wywołuje błędu, ale logicznie nie mogę się odwołać do pierwszego elementu. Na twoim miejscu zabezpieczyłbym się na wypadek, gdy użytkownik chce podać 0. Nie testowałeś dla i = 0? Zapomniałeś również postawić "*" przed wskaźnikiem str.

Odnośnik do komentarza
Udostępnij na innych stronach

@mannor

Fakt, kod pisany na szybko, żeby pokazać istotę błędu. Drobna literówka ;) .

 

@Will

delta1 = 128, delta2 = 16 w obu przypadkach. Z kolei przepuszczając przez debugger wynoszą one 176, 32.

Więc? Efekt jest tylko taki, że inaczej rozmieszczana jest pamięć dynamiczna. W pierwszym przypadku są rozmieszczone dalej niż w drugim, mimo to, odległość w drugim przypadku starczy na 4 elementy tablicy statycznej int.

Odnośnik do komentarza
Udostępnij na innych stronach

Masz na myśli tyle samo? Czyli czy zaalokujemy tablice 0-elementową, czy jedną zmienną to tyle samo zabierze nam pamięci, chociaż w drugim przypadku nie zapiszemy tam żadnej informacji. Akurat o pamięć mi się tutaj nie rozchodzi, raczej o bezpieczeństwo, ale skoro samo alokowanie nie wywoła błędu, a używanie zabezpieczone jest przez zmienną i (indeks nigdy nie przekroczy i. Skoro i = 0, to nie ma na czym operować ;) ) więc chyba jest dobrze ;) .

 

Dzięki za pomoc ;) .

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...