I have the next struct
struct Board
{
int width;
int height;
char **board;
}
And I would like to expand the **board, meaning I need more memory and thus the call to realloc(). So my question is how do I do that - shou开发者_运维百科ld I call realloc() on every line in the array separatly and the call it on the entire struct? Thanks!
Call realloc
for board
to increase the number of elements by 1, and then call malloc
on board[height]
(assuming height is the first dimension) to add a new row
You need to call malloc
not realloc
on board
. When you instantiate an object of Board
, no memory is allocated to the member board
; so it's not a question of reallocating memory, but allocating memory to board
in the usual way for multidimensional arrays.
#include <stdlib.h>
int **array;
array = malloc(nrows * sizeof(int *));
if(array == NULL)
{
fprintf(stderr, "out of memory\n");
exit or return
}
for(i = 0; i < nrows; i++)
{
array[i] = malloc(ncolumns * sizeof(int));
if(array[i] == NULL)
{
fprintf(stderr, "out of memory\n");
exit or return
}
}
Once, you've allocated memory, and then if you need to expand board
(e.g. board
was initially 2x2 and now you want it to be 6x6), call realloc
in the same order you called malloc
to initialize board
.
If you want more lines, you should call realloc
on board
, if you want to expand lines, you need to call realloc
on each line you previously allocated (e.g. board[0]
, board[1]
etc)
If you can predict how much memory you need, it would be the best to only call it once. Doing otherwise might slow down the whole suff massively.
精彩评论