Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Borland C++ поддерживает две функции для заполнения определенного числа байтов значениями memset() и setmem(), прототипы которых объявлены в файле МЕМ.Н. Поскольку функция memset() работает в DOS, Windows и других открытых системах (и является частью стандартной библиотеки ANSI С), она предпочтительнее функции setmem(), которая является нестандартной.
Используйте функцию memset(), как это показано в листинге 6.11. Программа заполняет всю доступную память кучи (за исключением нескольких заголовочных байтов) нулями. Используйте программу MEMFILL в качестве отладочного средства, облегчающего поиск ошибок, вызванных остаточными значениями в ОЗУ. Если ошибки исчезают после запуска MEMFILL, в вашей программе, скорее всего, неправомочно используются неинициализированные указатели.
Замечание
Из-за использования функции farcoreleft() вы не сможете скомпилировать и запустить программу MEMFILL; как EasyWin-приложение. Но вы можете вызывать функции memset() или setmem() в DOS- и Windows-приложениях. Скомпилируйте программу MEMFILL. С как DOS-приложение либо в IDE, либо из командной строки DOS.введя bсс memfill.с. Затем, чтобы запустить программа под управлением DOS.введите memfill.
Листинг 6.11. MEMFILL.С (запоминание нулей в доступной памяти)
1: #lnclude <stdio.h>
2: #include <alloc. h>
3: #include <mem.h>
4:
5: #define BLOCK_SIZE 4092
6:
7: main()
8: {
9: unsigned long len;
10: unsigned char far *p;
11:
12: puts("Memory Filler"),
13: printf("Filling %lu bytes...", farcoreleft());
14: do {
15: len = farcoreleft();
16: if (len > BLOCK_SIZE)
17: len = BLOCK_SIZE;
18: p = (unsigned char far *)farrnalloc(len);
19: if (p)
20: _fmemset(p, 0, (size_t)len);
21: } while (p);
22: printf("\nDone");
23: return 0;
24: }
______________________________________________________
Строка 20 вызывает функцию _fmemset(), которая является дальним эквивалентом ближней функции memset(). Если буфер адресуется указателем p, то следующий оператор установит первые 10 байт равными единице:
memset(p, 1, 10);
Если p является дальним указателем, как в программе MEMFILL, замените функцию memset() на _fmemset().
Дата публикования: 2015-01-23; Прочитано: 232 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!