GRASS GIS 8 Programmer's Manual  8.3.1(2023)-exported
alloc.c File Reference

GIS Library - Memory allocation routines. More...

#include <stdlib.h>
#include <grass/gis.h>
#include <grass/glocale.h>
Include dependency graph for alloc.c:

Go to the source code of this file.

Functions

void * G__malloc (const char *file, int line, size_t n)
 Memory allocation. More...
 
void * G__calloc (const char *file, int line, size_t m, size_t n)
 Memory allocation. More...
 
void * G__realloc (const char *file, int line, void *buf, size_t n)
 Memory reallocation. More...
 
void G_free (void *buf)
 Free allocated memory. More...
 
void * G_incr_void_ptr (const void *ptr, size_t size)
 Advance void pointer. More...
 

Detailed Description

GIS Library - Memory allocation routines.

(C) 1999-2009 by the GRASS Development Team

This program is free software under the GNU General Public License (>=v2). Read the file COPYING that comes with GRASS for details.

Author
Original author CERL

Definition in file alloc.c.

Function Documentation

◆ G__calloc()

void* G__calloc ( const char *  file,
int  line,
size_t  m,
size_t  n 
)

Memory allocation.

Allocates a properly aligned block of memory n*m bytes in length, initializes the allocated memory to zero, and returns a pointer to the allocated block of memory.

Dies with error message on memory allocation fail.

Note: Allocating memory for reading and writing raster maps is discussed in Allocating_Raster_I_O_Buffers.

Parameters
filefine name
lineline number
melement size
nnumber of elements

Definition at line 73 of file alloc.c.

◆ G__malloc()

void* G__malloc ( const char *  file,
int  line,
size_t  n 
)

Memory allocation.

Allocates a block of memory at least n bytes which is aligned properly for all data types. A pointer to the aligned block is returned.

Dies with error message on memory allocation fail.

Parameters
filefile name
lineline number
nnumber of elements

Definition at line 32 of file alloc.c.

◆ G__realloc()

void* G__realloc ( const char *  file,
int  line,
void *  buf,
size_t  n 
)

Memory reallocation.

Changes the size of a previously allocated block of memory at ptr and returns a pointer to the new block of memory. The size may be larger or smaller than the original size. If the original block cannot be extended "in place", then a new block is allocated and the original block copied to the new block.

Note: If buf is NULL, then this routine simply allocates a block of n bytes else buf must point to memory that has been dynamically allocated by G_malloc(), G_calloc(), G_realloc(), malloc(3), alloc(3), or realloc(3).. This routine works around broken realloc() routines, which do not handle a NULL buf.

Parameters
filefile name
lineline number
[in,out]bufbuffer holding original data
[in]narray size

Definition at line 119 of file alloc.c.

◆ G_free()

void G_free ( void *  buf)

Free allocated memory.

Parameters
[in,out]bufbuffer holding original data

Definition at line 150 of file alloc.c.

Referenced by cairo_read_ppm(), cairo_write_ppm(), free_datum_list(), free_ellps_list(), free_fontcap(), free_slice_buff(), free_vol_buff(), free_volfile_buffs(), G__read_Cell_head(), G_free_fmatrix(), G_free_fvector(), G_free_ilist(), G_free_imatrix(), G_free_ivector(), G_free_key_value(), G_free_list(), G_free_matrix(), G_free_tokens(), G_free_vector(), G_get_available_mapsets(), G_init_ilist(), G_list(), G_ls(), G_math_free_spmatrix(), G_math_free_spvector(), G_math_solver_sparse_gs(), G_math_solver_sparse_jacobi(), G_matrix_free(), G_matrix_LU_solve(), G_vector_free(), gk_free_key(), gk_make_linear_framesfromkeys(), gp_free_sitemem(), GPJ_free_datum(), GPJ_free_datum_transform(), GPJ_free_ellps(), GPJ_init_transform(), GPJ_osr_to_grass(), GPJ_set_csv_loc(), gs_init_normbuff(), gs_malloc_lookup(), GS_write_ppm(), GS_write_tif(), gv_free_vectmem(), GVL_isosurf_del(), gvl_isosurf_freemem(), Gvl_unload_colors_data(), kdtree_destroy(), N_free_geom_data(), N_free_gradient_2d(), N_free_gradient_3d(), N_free_gradient_field_2d(), N_free_gradient_field_3d(), N_free_gradient_neighbours_2d(), N_free_gradient_neighbours_3d(), N_free_gradient_neighbours_x(), N_free_gradient_neighbours_y(), N_free_gradient_neighbours_z(), N_free_les(), N_init_geom_data_2d(), Nviz_destroy_render_window(), Nviz_draw_all_site(), Nviz_draw_all_vol(), Nviz_get_exag(), Nviz_set_focus_map(), path_free(), read_pgm(), Segment_close(), Segment_release(), set_proj_share(), and write_pgm().

◆ G_incr_void_ptr()

void* G_incr_void_ptr ( const void *  ptr,
size_t  size 
)

Advance void pointer.

Advances void pointer by size bytes. Returns new pointer value.

Useful in raster row processing loops, substitutes

CELL *cell;
cell += n;

Now

rast = G_incr_void_ptr(rast, Rast_cell_size(data_type))
void * G_incr_void_ptr(const void *ptr, size_t size)
Advance void pointer.
Definition: alloc.c:187

(where rast is void* and data_type is RASTER_MAP_TYPE can be used instead of rast++.)

Very useful to generalize the row processing - loop i.e.

void * buf_ptr += Rast_cell_size(data_type)
Parameters
ptrpointer
sizebuffer size
Returns
pointer to the data

Definition at line 187 of file alloc.c.