我正在使用以下代码动态创建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);