Кент Рейсдорф. BORLAND C++BUILDER. Раздел 1
Кент Рейсдорф. BORLAND C++BUILDER. Страница 64
char buff[80];
char* bigBuff = new char[4096];
Для первого массива размер буфера мал, поэтому не имеет большого значения, где его размещать. Второй массив состоит уже из относительно большого числа элементов, поэтому для экономии стековой памяти его лучше разместить в «куче». Обращение к локальным и динамическим массивам (как вы помните, строка — это всего лишь массив типа char) происходит одинаковым образом. Иными словами, они используют тот же самый синтаксис:
strcpy(buff, "Ricky Rat");
strcpy(bigBuff, "A very long string that goes on and on..."); II...
strcpy(bigBuff, buff);
Вспомните, что имя локального массива само по себе является указателем на начало памяти, которую занимает массив. При динамическом распределении указателю также присваивается адрес первого элемента массива, поэтому обе формы записи взаимозаменяемы.
Если оператор new не может выделить запрашиваемую память, он возвращает NULL; Теоретически вы должны проверить указатель после вызова new и убедиться, что он имеет ненулевое значение:
char (1024 3;;i.;.-Ш jjjff:"
i£fstrcpy (buff "Buteo Regalis"'h; лШи^Ж
else RoportError(); 11 что-то не в порядке
В действительности же, если оператор new не срабатывает в 32-разрядной Windows-программе, это говорит о неполадках в самой системе, и в этом случае ни ваша программа, ни какая-либо другая долго не проработают.
Если вы пытаетесь выделить очень большие фрагменты памяти (размером в несколько:мегабайт) или распределяете память в критических участках программы, следует проверить значение указателя перед его дальнейшим использованием. При решении обычных задач можно, скорее всего, обойтись и без такой проверки:■ 7 Г' ■ ■ ::. ..