Rudy Opublikowano 19 Lipca 2011 Udostępnij Opublikowano 19 Lipca 2011 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 Więcej opcji udostępniania...
Lunatyk Opublikowano 20 Lipca 2011 Udostępnij Opublikowano 20 Lipca 2011 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 Więcej opcji udostępniania...
Will Opublikowano 20 Lipca 2011 Udostępnij Opublikowano 20 Lipca 2011 Kod do przemyślenia: int *a = new int; int *b = new int; int delta1 = ((int)b - (int)a); a = new int[0]; b = new int[0]; int delta2 = ((int)b - (int)a); Checknij sobie wartość delta1 i delta2 w debug i release. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rudy Opublikowano 20 Lipca 2011 Autor Udostępnij Opublikowano 20 Lipca 2011 @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 Więcej opcji udostępniania...
Will Opublikowano 20 Lipca 2011 Udostępnij Opublikowano 20 Lipca 2011 Jeśli używasz visuala dla wersji debug powinieneś mieć po 64. To nie chodzi o ich położenie tylko o to ile zajmuje alokacja tych dwóch wersji. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rudy Opublikowano 20 Lipca 2011 Autor Udostępnij Opublikowano 20 Lipca 2011 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 Więcej opcji udostępniania...
Rekomendowane odpowiedzi