malloc/realloc对字符**的限制?

malloc/realloc对字符**的限制?,c,arrays,pointers,memory-management,C,Arrays,Pointers,Memory Management,假设我有一个字符**“bob”,我以 char **bob = malloc(10 * sizeof(bob[0])); 对于我在bob下存储的每个元素,我以 bob[num] = malloc(10); 我的问题是,你能不能只在bob下malloc元素,直到你对字符**本身进行malloce处理的数量 即,如果bob[num]=malloc(10)重复了5次,我们总共处理了50个字节-因为这超过了原始的10*sizeof(bob[0])(哪个mallocs 40),这会导致程序出错吗 或者

假设我有一个字符**“bob”,我以

char **bob = malloc(10 * sizeof(bob[0]));
对于我在bob下存储的每个元素,我以

bob[num] = malloc(10);
我的问题是,你能不能只在bob下malloc元素,直到你对字符**本身进行malloce处理的数量

即,如果
bob[num]=malloc(10)重复了5次,我们总共处理了50个字节-因为这超过了原始的
10*sizeof(bob[0])
(哪个mallocs 40),这会导致程序出错吗

或者,在char**下malloc到元素的内存量是否不受分配给char**本身的内存的限制

或者,在char**下malloc到元素的内存量是否不受分配给char**本身的内存的限制

是的,就是这样。当您为
char**
分配内存时,您正在为10个
char*
腾出空间。然后,当您分配这些
char*
时,它们最终指向完全独立的新内存块,与存储它们的块无关

或者,在char**下malloc到元素的内存量是否不受分配给char**本身的内存的限制


是的,就是这样。当您为
char**
分配内存时,您正在为10个
char*
腾出空间。然后,当您分配这些
char*
时,它们最终指向完全独立的新内存块,与存储它们的块无关。

您正在创建一个基于指针的查找表。不要将其与2D阵列混淆

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

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

不同节段的大小也可以完全独立,彼此之间没有关系

您正在创建一个基于指针的查找表。不要将其与2D阵列混淆

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

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

不同节段的大小也可以完全独立,彼此之间没有关系

我已经为我的char**分配了40个元素,但是当我试图在其中插入第13个元素时程序崩溃了。当我分配44时,它在插入第21个元素后崩溃。这很令人困惑,我认为4字节=1个指针?@RobertBenedict指针的大小取决于平台。您的内存使用可能存在错误,您应该发布一个关于崩溃问题的新问题。@RobertBenedict如果您为10个指针分配空间并写入第13个“元素”,您将调用未定义的行为。这并不意味着它会在11点、20点甚至385点崩溃。它可以做任何事情,因为它是未定义的。@RobertBenedict从不假设类型的大小:始终使用
sizeof
运算符。我怀疑你会发现你的系统上的指针是8字节(就像我的一样)。我已经为我的字符**分配了40字节,但是当我试图在其中插入第13个元素时程序崩溃了。当我分配44时,它在插入第21个元素后崩溃。这很令人困惑,我认为4字节=1个指针?@RobertBenedict指针的大小取决于平台。您的内存使用可能存在错误,您应该发布一个关于崩溃问题的新问题。@RobertBenedict如果您为10个指针分配空间并写入第13个“元素”,您将调用未定义的行为。这并不意味着它会在11点、20点甚至385点崩溃。它可以做任何事情,因为它是未定义的。@RobertBenedict从不假设类型的大小:始终使用
sizeof
运算符。我怀疑您会发现,指针在您的系统上是8字节(就像在我的系统上一样)。