Document the fact that hdestory calls free on the keys added with

hsearch(.., ENTER). Make the example reflect this.

PR:		49951
Submitted by:	Peter Jeremy <peterjeremy@optushome.com.au>
This commit is contained in:
David Malone 2003-03-12 14:18:14 +00:00
parent 5b24125046
commit 5560a5abb3

View file

@ -44,6 +44,12 @@ function disposes of the search table, and may be followed by another call to
After the call to
.Fn hdestroy ,
the data can no longer be considered accessible.
The
.Fn hdestroy
function calls
.Xr free 3
for each comparison key in the search table
but not the data item associated with the key.
.Pp
The
.Fn hsearch
@ -88,6 +94,20 @@ Unsuccessful resolution is
indicated by the return of a
.Dv NULL
pointer.
.Pp
The comparison key (passed to
.Fn hsearch
as
.Fa item.key )
must be allocated using
.Xr malloc 3
if
.Fa action
is
.Dv ENTER
and
.Fn hdestroy
is called.
.Sh RETURN VALUES
The
.Fn hcreate
@ -132,6 +152,7 @@ table and prints it out.
#include <stdio.h>
#include <search.h>
#include <string.h>
#include <stdlib.h>
struct info { /* This is the info stored in the table */
int age, room; /* other than the key. */
@ -142,9 +163,8 @@ struct info { /* This is the info stored in the table */
int
main(void)
{
char string_space[NUM_EMPL*20]; /* Space to store strings. */
char str[BUFSIZ]; /* Space to read string */
struct info info_space[NUM_EMPL]; /* Space to store employee info. */
char *str_ptr = string_space; /* Next space in string_space. */
struct info *info_ptr = info_space; /* Next space in info_space. */
ENTRY item;
ENTRY *found_item; /* Name to look for in table. */
@ -154,12 +174,11 @@ main(void)
/* Create table; no error checking is performed. */
(void) hcreate(NUM_EMPL);
while (scanf("%s%d%d", str_ptr, &info_ptr->age,
while (scanf("%s%d%d", str, &info_ptr->age,
&info_ptr->room) != EOF && i++ < NUM_EMPL) {
/* Put information in structure, and structure in item. */
item.key = str_ptr;
item.key = strdup(str);
item.data = info_ptr;
str_ptr += strlen(str_ptr) + 1;
info_ptr++;
/* Put item into table. */
(void) hsearch(item, ENTER);
@ -177,6 +196,7 @@ main(void)
} else
(void)printf("no such employee %s\en", name_to_find);
}
hdestroy();
return 0;
}
.Ed