我有以下C代码:
int a; size_t size = 2000sizeof(int); a = (int *) malloc(size); 效果很好。但是如果我有以下内容:
char **b = malloc(2000*sizeof *b); 其中的每个元素b都有不同的长度。
怎么可能做b和我一样的事情a;即下面的代码将保持正确?
char c; size_t size = 2000sizeof(char *); c = (char *) malloc(size); 问题来源于stack overflow
首先,您需要分配指针数组,例如char *c = malloc( N * sizeof( char )),然后malloc可能在循环中通过对的单独调用来分配每一行:
/* N is the number of rows / / note: c is char** / if (( c = malloc( Nsizeof( 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'; 如果您知道元素的总数(例如NM),则可以一次分配。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。