_bfreese.gml

来自「开放源码的编译器open watcom 1.6.0版的源代码」· GML 代码 · 共 78 行

GML
78
字号
.func _bfreeseg
#include <malloc.h>
int _bfreeseg( __segment seg );
.ixfunc2 '&Memory' _bfreeseg
.funcend
.desc begin
The &func function frees a based-heap segment.
.pp
The argument
.arg seg
indicates the segment returned by an earlier call to
.kw _bheapseg.
.desc end
.return begin
The &func function returns 0 if successful and -1 if an error occurred.
.return end
.see begin
.if &e'&dohelp eq 0 .do begin
.seelist _bfreeseg _bcalloc _bexpand _bfree _bheapseg _bmalloc _brealloc
.do end
.el .do begin
.seelist _bfreeseg _bheapseg calloc _expand free malloc realloc
.do end
.see end
.exmp begin
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

struct list {
    struct list __based(__self) *next;
    int         value;
};
.exmp break
void main()
  {
    int         i;
    __segment   seg;
    struct list __based(seg) *head;
    struct list __based(seg) *p;
.exmp break
    /* allocate based heap */
    seg = _bheapseg( 1024 );
    if( seg == _NULLSEG ) {
      printf( "Unable to allocate based heap\n" );
      exit( 1 );
    }
.exmp break
    /* create a linked list in the based heap */
    head = 0;
    for( i = 1; i < 10; i++ ) {
      p = _bmalloc( seg, sizeof( struct list ) );
      if( p == _NULLOFF ) {
        printf( "_bmalloc failed\n" );
        break;
      }
      p->next = head;
      p->value = i;
      head = p;
    }
.exmp break
    /* traverse the linked list, printing out values */
    for( p = head; p != 0; p = p->next ) {
      printf( "Value = %d\n", p->value );
    }
.exmp break
    /* free all the elements of the linked list */
    for( ; p = head; ) {
      head = p->next;
      _bfree( seg, p );
    }
    /* free the based heap */
    _bfreeseg( seg );
  }
.exmp end
.class WATCOM
.system

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?