AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Snippets and Tutorials (https://forums.alliedmods.net/forumdisplay.php?f=112)
-   -   Dynamic allocation Of 2D arrays (https://forums.alliedmods.net/showthread.php?t=305495)

sjoytu 02-22-2018 01:36

Dynamic allocation Of 2D arrays
 
Description: add to source, compile and run. very brief example usage (basically just the calling syntax) included in the comments two functions; the first dynamically allocates a 2D array with a user- or program-specified number of rows/columns; the second deallocates the same array. demonstrates the multi-dimensional usage of malloc and free. this snippet is also here: https://txeditor.com/jhn8gomb8g1

Code:

/*  allocate2D
/*  function to dynamically allocate 2-dimensional array using malloc.
/*
/*  accepts an int** as the "array" to be allocated, and the number of rows and
/*  columns.
*/
void allocate2D(int** array, int nrows, int ncols) {
   
    /*  allocate array of pointers  */
    array = ( int** )malloc( nrows*sizeof( int* ) );
   
    /*  allocate each row  */
    int i;
    for(i = 0; i < nrows; i++) {
          array[i] = ( int* )malloc( ncols*sizeof( int ) );
    }

}

/*  deallocate2D
/*  corresponding function to dynamically deallocate 2-dimensional array using
/*  malloc.
/*
/*  accepts an int** as the "array" to be allocated, and the number of rows. 
/*  as with all dynamic memory allocation, failure to free malloc'ed memory
/*  will result in memory leaks
*/
void deallocate2D(int** array, int nrows) {
   
    /*  deallocate each row  */
    int i;
    for(i = 0; i < nrows; i++) {
          free(array[i]);
    }
   
    /*  deallocate array of pointers  */
    free(array);
   
}

/*  EXAMPLE USAGE:   
int** array1;

allocate2D(array1,1000,1000); //allocates a 1000x1000 array of ints

deallocate2D(array1,1000);    //deallocates the same array
*/


hmmmmm 02-22-2018 14:21

Re: Dynamic allocation Of 2D arrays
 
I'm not sure if you're meant to have C code in SourceMod tutorials section, but regardless I'm just gonna say that I prefer using 1D array then mapping to 2D so that I don't get into the allocation aids. Just 1 malloc (size=width*height)/free and thats it.

Then to access an element at x/y you can do array[x + y*width]

TheXeon 03-16-2018 16:21

Re: Dynamic allocation Of 2D arrays
 
ArrayList of ArrayList?


All times are GMT -4. The time now is 18:52.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.