Случайный афоризм
В произведении гения обычный читатель ищет мудрость, в произведении новичка - ошибки. И, как правило, находит именно то, что ищет. Вот почему найти обратное такой читатель может лишь по случайности. Гарун Агацарский
 
новости
поиск по автору
поиск по тематике
поиск по ключевому слову
проба пера
энциклопедия авторов
словарь терминов
программы
начинающим авторам
ваша помощь
о проекте
Книжный магазин
Главная витрина
Книги компьютерные
Книги по психологии
Книги серии "Для чайников"
Книги по лингвистике
ЧАВо
Разные Статьи
Статьи по литературе

Форма пользователя
Логин:
Пароль:
регистрация
 детектив



 драмма



 животные



 история



 компьютерная документация



 медицина



 научно-популярная



 очередная история



 очерк



 повесть



 политика



 поэзия и лирика



 приключения



 психология



 религия



 студенту



 технические руководства



 фантастика



 философия и мистика



 художественная литература



 энциклопедии, словари



 эротика, любовные романы



в избранноеконтакты

Параметры текста
Шрифт:
Размер шрифта: Высота строки:
Цвет шрифта:
Цвет фона:

  Что происходит,  когда  new  не  находит  памяти  для  выделения?
Поскольку  даже  виртуальная  память  конечна,  это  иногда  должно
происходить. Запрос вроде

  char* p = new char[100000000];

как правило,  приводит к каким-то неприятностям. Когда у new ничего
не  получается,   она  вызывает  функцию,  указываемую  указаетелем
_new_handler (указатели на функции обсуждаются в #4.6.9). Вы можете
задать указатель  явно или  использовать функцию set_new_handler().
Например:

  #include

  void out_of_store()
  {
      cerr << "операция new не прошла: за пределами памяти\n";
      exit(1);
  }

  typedef void (*PF)();    // тип указатель на функцию

  extern PF set_new_handler(PF);

  main()
  {
      set_new_handler(out_of_store);
      char* p = new char[100000000];
      cout << "сделано, p = " << long(p) << "\n";
  }

как правило,  не будет  писать  "сделано",  а  будет  вместо  этого
выдавать

  операция new не прошла: за пределами памяти

  _new_handler может делать и кое-что поумнее, чем просто завершать
выполнение программы.  Если вы  знаете, как  работают new и delete,
например, потому,  что вы  задали свои собственные operator new() и
operator  delete(),  программа  обработки  может  попытаться  найти
некоторое  количество   памяти,  которое   возвратит  new.  Другими
словами, пользователь  может сделать  сборщик мусора, сделав, таким
образом, использование delete необязательным. Но это, конечно, все-
таки задача не для начинающего.
  По историческим  причинам new просто возвращает указатель 0, если
она не  может найти  достаточное количество  памяти и  не был задан
никакой _new_handler. Например

  include

  main()
  {
      char* p = new char[100000000];
      cout << "сделано, p = " << long(p) << "\n";
  }

                             - стр 100 -

выдаст


1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : 9 : 10 : 11 : 12 : 13 : 14 : 15 : 16 : 17 : 18 : 19 : 20 : 21 : 22 : 23 : 24 : 25 : 26 : 27 : 28 : 29 : 30 : 31 : 32 : 33 : 34 : 35 : 36 : 37 : 38 : 39 : 40 : 41 : 42 : 43 : 44 : 45 : 46 : 47 : 48 : 49 : 50 : 51 : 52 : 53 : 54 : 55 : 56 : 57 : 58 : 59 : 60 : 61 : 62 : 63 : 64 : 65 : 66 : 67 : 68 : 69 : 70 : 71 : 72 : 73 : 74 : 75 : 76 : 77 : 78 : 79 : 80 : 81 : 82 : 83 : 84 : 85 : 86 : 87 : 88 : 89 : 90 : 91 : 92 : 93 : 94 : 95 : 96 : 97 : 98 : 99 : 100 : 101 : 102 : 103 : 104 : 105 : 106 : 107 : 108 : 109 : 110 : 111 : 112 : 113 : 114 : 115 : 116 : 117 : 118 : 119 : 120 : 121 : 122 : 123 : 124 : 125 : 126 : 127 : 128 : 129 : 130 : 131 : 132 : 133 : 134 : 135 : 136 : 137 : 138 : 139 : 140 : 141 : 142 : 143 : 144 : 145 : 146 : 147 : 148 : 149 : 150 : 151 : 152 : 153 : 154 : 155 : 156 : 157 : 158 : 159 : 160 : 161 : 162 : 163 : 164 : 165 : 166 : 167 : 168 : 169 : 170 : 171 : 172 : 173 : 174 : 175 : 176 : 177 : 178 : 179 : 180 : 181 : 182 : 183 : 184 : 185 : 186 : 187 : 188 : 189 : 190 : 191 : 192 : 193 : 194 : 195 : 196 : 197 : 198 : 199 : 200 : 201 : 202 : 203 : 204 : 205 : 206 : 207 : 208 : 209 : 210 : 211 : 212 : 213 : 214 : 215 : 216 : 217 : 218 : 219 : 220 : 221 : 222 : 223 : 224 : 225 : 226 : 227 : 228 : 229 : 230 : 231 : 232 : 233 : 234 : 235 : 236 : 237 : 238 : 239 : 240 : 241 : 242 : 243 : 244 : 245 : 246 : 247 : 248 : 249 :
главная наверх

(c) 2008 Большая Одесская Библиотека.