2015-10-16 74 views
0

说我有一个char **“鲍勃”,我在malloc/realloc对char **的限制?

char **bob = malloc(10 * sizeof(bob[0])); 

形式malloc和说每一个我在Bob存储元素,我的malloc在

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

我的问题是,你可以只bob下的malloc元素达到你将char **本身粘贴的数量吗?

I.e.如果bob[num] = malloc(10);重复了5次,我们总共有50个字节 - 因为它超过了原来的10 * sizeof(bob[0])(mallocs 40),这是否会导致程序崩溃?

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

回答

3

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

是的,情况就是这样。当你为你的char**分配内存时,你为10 char*腾出空间。当你分配这些char*的时候,它们最终会指向完全独立的新块,与它们自己被存储的块无关。

+0

我已经为我的char **分配了40个,但当程序崩溃时,我尝试向其中插入第13个元素。当我分配44,它插入第21个元素后,而不是崩溃。这很混乱,我认为4个字节= 1个指针? –

+0

@RobertBenedict指针的大小取决于平台。在使用内存时可能存在一个错误,您应该发布有关崩溃问题的新问题。 – molbdnilo

+1

@RobertBenedict如果您为10个指针分配空间并写入第13个“元素”,则调用*未定义行为*。这并不意味着它会在11或20甚至385时崩溃。它可以做*任何*,因为它是* undefined *。 –

3

您正在创建一个基于指针的查找表。不要混淆这个2D数组。

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

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

不同部分的大小也可以是完全独立的,互不相关。