我正在使用以下代码动态创建2d数组:

char **FileTables;
int rows = 1000;
int i;

FileTables = (char**)malloc(rows * sizeof(char));
for (i = 0; i < rows; i++) {
    FileTables[i] = (char*)malloc(256 * sizeof(char));
}

问题在于1000行,并且可能还有更多行,分配所有内存需要几秒钟。
有没有更快/更好的方法来做到这一点?

编辑:
除了显而易见的更简单的代码之外,使用这些方法中的一种相对于其他方法还有优势吗?
char **FileTables;
int rows = 1000;
int i;

FileTables = malloc(rows * sizeof(char*));
FileTables[0] = malloc(rows * 256 * sizeof(char));
for (i = 0; i < rows; i++) {
    FileTables[i] = FileTables[0] + i * 256;
}

和..
char (*FileTables)[256];
int rows = 1000;

FileTables = malloc(rows * sizeof(*FileTables));

(是的,我修复了不必要的强制转换)

最佳答案

只要列数是恒定的,或者如果您使用的是C99,就可以不用一个malloc而不必自己做难看的行/列寻址算法:

char (*FileTables)[256] = malloc(rows * sizeof *FileTables);

10-08 07:27