重新分配结构,c

时间:2011-08-16 14:29:51

标签: c realloc

我有下一个结构

struct Board
{
    int width;
    int height;
    char **board;
}

我想扩展**板,这意味着我需要更多内存,因此需要更多内存 realloc的()。所以我的问题是我该怎么做 - 我应该分别在数组中的每一行上调用realloc()并在整个结构上调用它吗? 谢谢!

4 个答案:

答案 0 :(得分:1)

致电realloc board,将元素数量增加1,然后在malloc上调用board[height](假设高度为第一维)添加新元素行

答案 1 :(得分:0)

如果您想要更多行,则应在realloc上致电board,如果您想扩展行,则需要在之前分配的每一行上调用realloc(例如{{} 1}},board[0]等)

答案 2 :(得分:0)

如果你可以预测你需要多少内存,那么最好只调用一次。否则可能会大幅减慢整个文件夹。

答案 3 :(得分:0)

您需要在malloc上致电realloc而不是board。实例化Board对象时,不会为成员board分配内存;所以这不是重新分配内存的问题,而是以multidimensional arrays的通常方式将分配内存分配给board

#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
        }
    }

一次,您已经分配了内存,然后如果您需要展开{​​{1}}(例如board最初为2x2,现在您希望它为6x6),请调用board in您调用realloc初始化malloc的订单。