【发布时间】:2012-09-01 07:32:45
【问题描述】:
在设计时我可以像这样声明一个变量:
char szDesignTimeArray[120][128];
上面的声明是120个大小为128的数组。在运行时我需要分配以下内容:
char szRunTime[?][128];
我知道数组的大小,但我不知道需要分配多少个数组。知道号码后如何申报和分配?
感谢所有
【问题讨论】:
-
C99 可用吗?那么变长数组可能是最简单的了。
在设计时我可以像这样声明一个变量:
char szDesignTimeArray[120][128];
上面的声明是120个大小为128的数组。在运行时我需要分配以下内容:
char szRunTime[?][128];
我知道数组的大小,但我不知道需要分配多少个数组。知道号码后如何申报和分配?
感谢所有
【问题讨论】:
我假设在运行时您也知道 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
}
}
参考:
【讨论】:
free(array);。
calloc 代替malloc 吗?
静态知道行长,也可以分配
char (*szRunTime)[128];
// obtain row count
szRunTime = malloc(rowCount * sizeof *szRunTime);
内存指向char[128]。这样,您将获得一个连续的内存块,这可能会提供更好的局部性,并且您只需要 free 一个指针。
如果行数不太大,使用变长数组,
rowCount = whatever;
char szRunTime[rowCount][128];
如果支持 C99 或更高版本,可能是最佳选择。
【讨论】:
使用这个,其中变量是你想要多少个数组:
char **szRunTime = malloc(sizeof(char *)*Variable);
int i;
for(i=0 ; i<Variable ; i++)
szRunTime[i] = malloc(sizeof(char)*128);
【讨论】: