C语言 如何在运行时分配多维数组?

taor4pac  于 2023-03-22  发布在  其他
关注(0)|答案(3)|浏览(165)

在设计时,我可以像这样声明一个变量:

char szDesignTimeArray[120][128];

上面的声明是120个大小为128的数组。在运行时我需要分配以下内容:

char szRunTime[?][128];

我知道数组的大小,但不知道需要分配多少个数组。当我知道数组的数量时,我如何声明并分配它们?
感谢一切

kdfy810k

kdfy810k1#

我假设在运行时您也知道Row_Size。
可以在运行时动态分配多维数组,如下所示:

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

参考:
http://www.eskimo.com/~scs/cclass/int/sx9b.html

eeq64g8w

eeq64g8w2#

静态地知道行的长度后,还可以分配

char (*szRunTime)[128];
// obtain row count
szRunTime = malloc(rowCount * sizeof *szRunTime);

内存指向指向char[128]的指针。这样,你就得到了一个连续的内存块,这可能会给予更好的局部性,而且你只需要free一个指针。
如果行数不太大,则使用变长数组,

rowCount = whatever;
char szRunTime[rowCount][128];

但是,如果支持C99或更高版本,则可能是最佳选择。

nimxete2

nimxete23#

使用这个,,其中Variable是您想要的数组数量:

char **szRunTime = malloc(sizeof(char *)*Variable);
int i;
for(i=0 ; i<Variable ; i++)
    szRunTime[i] = malloc(sizeof(char)*128);

相关问题