Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Заполнение памяти



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; Прочитано: 231 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...