malloc / realloc对char **的限制?

时间:2015-10-16 06:50:32

标签: c arrays pointers memory-management

说我有一个char **“bob”,我以

的形式使用malloc
char **bob = malloc(10 * sizeof(bob[0]));

并说我在bob下存储的每个元素,我以

的形式malloc一定数量的空间
bob[num] = malloc(10);

我的问题是,你是否只能在bob下使用malloc元素达到你对char **本身进行malloced的数量?

即。如果bob[num] = malloc(10);被重复5次,我们总共需要50个字节 - 因为它超过了原来的10 * sizeof(bob[0])(mallocs 40),这会导致程序搞砸吗?

或者你对mall **下的元素进行malloc的内存量不受分配给char **本身的内存的限制吗?

2 个答案:

答案 0 :(得分:3)

  

或者你对mall **下的元素进行malloc的内存量不受分配给char **本身的内存的限制吗?

是的,情况确实如此。当您为getResourceAsStream分配内存时,您将为10 char**腾出空间。然后,当你分配这些char*时,它们最终指向完全独立的新内存块,与它们自己存储的块无关。

答案 1 :(得分:3)

您正在创建基于指针的查找表。不要将其与2D数组混淆。

第一个malloc分配一个指针数组,即实际表,它与指向的数据没有任何关系。内存布局如下:

bob[0] -> some segment of memory
bob[1] -> some other segment of memory
...

不同部分的大小也可以是完全独立的,彼此无关。