说我有一个char **“bob”,我以
的形式使用mallocchar **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 **本身的内存的限制吗?
答案 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
...
不同部分的大小也可以是完全独立的,彼此无关。