我有一个需要 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)