分配固定大小数组的数组(并将其传递给函数)

tin*_*ogs 5 c

我有一个需要 a 的函数wchar_t**,我正在分配它:

wchar_t * * lFilterPatterns = malloc(aNumOfFilterPatterns*sizeof(wchar_t *));
for (i = 0; i < aNumOfFilterPatterns; i++)
{
    lFilterPatterns[i] = malloc(MAX_PATH_OR_CMD*sizeof(wchar_t));
}
Run Code Online (Sandbox Code Playgroud)

有没有更好/更简单的方法来进行这种分配?

编辑:我宁愿只调用一次 malloc 。

已提议:

wchar_t (*lFilterPatterns)[MAX_PATH_OR_CMD] =
         malloc(aNumOfFilterPatterns * sizeof * lFilterPatterns);
Run Code Online (Sandbox Code Playgroud)

但随后该函数抱怨:警告 C4047: 'function' :

'wchar_t * *' differs in levels of indirection from 'wchar_t (*)[1024]'
Run Code Online (Sandbox Code Playgroud)

我可以将 'wchar_t (*)[1024]' 转换为 'wchar_t * *' 吗?

小智 0

C 语言中有 2 种普遍接受的分配 2D 数组的方法:连续方法和不规则方法。两种方法都有其优点和缺点。例如,您可以对由参差不齐的方法制成的数组进行打乱,但不连续。另一方面,它需要一个循环来释放破烂的,但对于连续的来说只需要快速的 2 次释放。

连续:

int** table = (int**)malloc(sizeof(int*)*rows);
int* data = (int*)malloc(sizeof(int)*rows*columns);
int i = 0;
for( i = 0; i < rows; i++ )
table[i] = &data[i*columns]
Run Code Online (Sandbox Code Playgroud)

释放连续:

free( table[0] );
free( table );
Run Code Online (Sandbox Code Playgroud)

衣衫褴褛:

int** table = (int**)malloc(sizeof(int*)*rows);
int i = 0;
for( i = 0; i < rows; i++ )
    table[i] = (int*)malloc(sizeof(int)*columns);
Run Code Online (Sandbox Code Playgroud)

释放衣衫褴褛:

  for( i = 0; i < rows; i++ )
        free( table[i] );

  free( table );
Run Code Online (Sandbox Code Playgroud)