50 lines
1 KiB
C
50 lines
1 KiB
C
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <malloc.h>
|
||
|
|
||
|
struct list {
|
||
|
struct list __based(__self) *next;
|
||
|
int value;
|
||
|
};
|
||
|
|
||
|
void main()
|
||
|
{
|
||
|
int i;
|
||
|
__segment seg;
|
||
|
struct list __based(seg) *head;
|
||
|
struct list __based(seg) *p;
|
||
|
|
||
|
/* allocate based heap */
|
||
|
seg = _bheapseg( 1024 );
|
||
|
if( seg == _NULLSEG ) {
|
||
|
printf( "Unable to allocate based heap\n" );
|
||
|
exit( 1 );
|
||
|
}
|
||
|
|
||
|
/* 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;
|
||
|
}
|
||
|
|
||
|
/* traverse the linked list, printing out values */
|
||
|
for( p = head; p != 0; p = p->next ) {
|
||
|
printf( "Value = %d\n", p->value );
|
||
|
}
|
||
|
|
||
|
/* free all the elements of the linked list */
|
||
|
for( ; p = head; ) {
|
||
|
head = p->next;
|
||
|
_bfree( seg, p );
|
||
|
}
|
||
|
/* free the based heap */
|
||
|
_bfreeseg( seg );
|
||
|
}
|