Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
DYNARR(3)		     C Programmer's Manual		     DYNARR(3)

NAME
       dynarr, dynarr_init, dynarr_resize, dynarr_free - simple	dynamic	arrays

SYNOPSIS
       #include	<publib.h>

       void dynarr_init(struct dynarr *da, size_t elsize);
       int dynarr_resize(struct	dynarr *da, size_t newsize);
       void dynarr_free(struct dynarr *da);

DESCRIPTION
       These functions make it easier to use dynamic arrays, i.e., arrays that
       are allocated with malloc(3) and	resized	with realloc(3).  Below	 is  a
       typical	code fragment for implementing a dynamic array that is resized
       as more input is	read.

	    char *p, *line;
	    size_t alloc, len;

	    len	= 0;
	    alloc = 1024;
	    if ((line =	malloc(alloc)) == NULL)	abort();

	    while (fgets(line +	len, alloc-len,	stdin) != NULL)	{
		 len = strlen(line);
		 alloc += 1024;
		 if ((p	= realloc(alloc)) == NULL) abort();
		 alloc = p;
	    }

       (The error handling is intentionally simplified.)  Below	is  the	 above
       fragment	with the dynarr(3).

	    struct dynarr da;

	    dynarr_init(&da);
	    while (fgets((char *)da.data + da.used, da.alloc-da.len, stdin) != NULL) {
		 da.used = strlen(da.data);
		 if (dynarr_resize(&da,	da.alloc + 1024) == -1)	abort();
	    }

       The  code  is  a	bit simpler, and all the memory	allocation details and
       most of the error checking code is hidden away.

       The dynamic array is represented	by a struct dynarr:

	    struct dynarr {
		void *data;
		size_t alloc, used;
	    };

       The interface to	the dynamic allocation has intentionally been made un-
       opaque.

       dynarr_init  initializes	 a  struct  dynarr  to	be an empty array, dy-
       narr_resize sets	its size to be newsize,	and dynarr_free	frees the  ar-
       ray (it will become an empty array again).

RETURNS
       dynarr_resize  returns -1 if it failed, 0 if it succeeded.  It does not
       change the array	in any way if it failed.

SEE ALSO
       publib(3), malloc(3), realloc(3), strdup(3)

AUTHOR
       Lars Wirzenius (lars.wirzenius@helsinki.fi)

Publib			     C Programmer's Manual		     DYNARR(3)

NAME | SYNOPSIS | DESCRIPTION | RETURNS | SEE ALSO | AUTHOR

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=dynarr&sektion=3&manpath=FreeBSD+12.1-RELEASE+and+Ports>

home | help