Кент Рейсдорф. 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 Г' ■ ■ ::. ..

Web-дизайн (с) 2010 All rights reserved