我有以下C
代码:
int *a;
size_t size = 2000*sizeof(int);
a = (int *) malloc(size);
这工作正常。但是,如果我有以下内容:
char **b = malloc(2000*sizeof *b);
每个元素b
都有不同的长度。
如何对b做像我对a所做的一样的事情?即下面的代码是否有误?
char *c;
size_t size = 2000*sizeof(char *);
c = (char *) malloc(size);
发布于 2018-04-25 09:49:35
/* N is the number of rows */
/* note: c is char** */
if (( c = malloc( N*sizeof( char* ))) == NULL )
{ /* error */ }
for ( i = 0; i < N; i++ )
{
/* x_i here is the size of given row, no need to
* multiply by sizeof( char ), it's always 1
*/
if (( c[i] = malloc( x_i )) == NULL )
{ /* error */ }
/* probably init the row here */
}
/* access matrix elements: c[i] give you a pointer
* to the row array, c[i][j] indexes an element
*/
c[i][j] = 'a';
发布于 2018-04-25 11:21:10
动态分配类型T的NxM数组的典型形式是
T **a = malloc(sizeof *a * N);
if (a)
{
for (i = 0; i < N; i++)
{
a[i] = malloc(sizeof *a[i] * M);
}
}
如果数组中的每个元素具有不同的长度,则用该元素的适当长度替换M; 例如
T **a = malloc(sizeof *a * N);
if (a)
{
for (i = 0; i < N; i++)
{
a[i] = malloc(sizeof *a[i] * length_for_this_element);
}
}
https://stackoverflow.com/questions/-100003971
复制相似问题