使用malloc分配具有不同行长度的多维数组

使用malloc分配具有不同行长度的多维数组

我有以下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);


明月笑刀无情
浏览 474回答 3
3回答

胡子哥哥

首先,你需要分配像指针一样的数组char **c = malloc( N * sizeof( char* )),然后用一个单独的调用来分配每一行malloc,可能在循环中:/*&nbsp;N&nbsp;is&nbsp;the&nbsp;number&nbsp;of&nbsp;rows&nbsp;&nbsp;*//*&nbsp;note:&nbsp;c&nbsp;is&nbsp;char**&nbsp;*/if&nbsp;((&nbsp;c&nbsp;=&nbsp;malloc(&nbsp;N*sizeof(&nbsp;char*&nbsp;)))&nbsp;==&nbsp;NULL&nbsp;){&nbsp;/*&nbsp;error&nbsp;*/&nbsp;}for&nbsp;(&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;N;&nbsp;i++&nbsp;){ &nbsp;&nbsp;/*&nbsp;x_i&nbsp;here&nbsp;is&nbsp;the&nbsp;size&nbsp;of&nbsp;given&nbsp;row,&nbsp;no&nbsp;need&nbsp;to &nbsp;&nbsp;&nbsp;*&nbsp;multiply&nbsp;by&nbsp;sizeof(&nbsp;char&nbsp;),&nbsp;it's&nbsp;always&nbsp;1 &nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;if&nbsp;((&nbsp;c[i]&nbsp;=&nbsp;malloc(&nbsp;x_i&nbsp;))&nbsp;==&nbsp;NULL&nbsp;) &nbsp;&nbsp;{&nbsp;/*&nbsp;error&nbsp;*/&nbsp;} &nbsp;&nbsp;/*&nbsp;probably&nbsp;init&nbsp;the&nbsp;row&nbsp;here&nbsp;*/}/*&nbsp;access&nbsp;matrix&nbsp;elements:&nbsp;c[i]&nbsp;give&nbsp;you&nbsp;a&nbsp;pointer &nbsp;*&nbsp;to&nbsp;the&nbsp;row&nbsp;array,&nbsp;c[i][j]&nbsp;indexes&nbsp;an&nbsp;element &nbsp;*/c[i][j]&nbsp;=&nbsp;'a';如果您知道元素的总数(例如N*M),则可以在单个分配中执行此操作。

largeQ

动态分配类型为T的NxM数组的典型形式是T&nbsp;**a&nbsp;=&nbsp;malloc(sizeof&nbsp;*a&nbsp;*&nbsp;N);if&nbsp;(a){ &nbsp;&nbsp;for&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;N;&nbsp;i++) &nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;a[i]&nbsp;=&nbsp;malloc(sizeof&nbsp;*a[i]&nbsp;*&nbsp;M); &nbsp;&nbsp;}}如果数组的每个元素具有不同的长度,则将M替换为该元素的适当长度;&nbsp;例如T&nbsp;**a&nbsp;=&nbsp;malloc(sizeof&nbsp;*a&nbsp;*&nbsp;N);if&nbsp;(a){ &nbsp;&nbsp;for&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;N;&nbsp;i++) &nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;a[i]&nbsp;=&nbsp;malloc(sizeof&nbsp;*a[i]&nbsp;*&nbsp;length_for_this_element); &nbsp;&nbsp;}}

慕桂英4014372

等效存储器分配char a[10][20]如下。char&nbsp;**a;a=(char&nbsp;**)&nbsp;malloc(10*sizeof(char&nbsp;*));for(i=0;i<10;i++) &nbsp;&nbsp;&nbsp;&nbsp;a[i]=(char&nbsp;*)&nbsp;malloc(20*sizeof(char));我希望这看起来很简单。
打开App,查看更多内容
随时随地看视频慕课网APP