<分区>
我试图理解双指针(它是持有另一个指针的指针)的内部结构以形成一个指针数组。因此,我尝试通过在 malloc 上进行调试来尝试运行以下代码并查看其工作原理。我无法理解 malloc(0)
在我的情况下做了什么,但我的代码通过输出“Hello World”来工作。
有什么区别
pToCharsPointers = (char**) malloc(0);
和
pToCharsPointers = (char**) malloc(2 * sizeof(char*));
请有人澄清它在我的案例中做了什么。
#include <stdio.h>
char **pToCharsPointers;
int main(void)
{
pToCharsPointers = (char**) malloc(0);
char* pToChars = "Hello";
*pToCharsPointers = pToChars;
*(pToCharsPointers + 1)= "World";
printf("%s %s\n", *(pToCharsPointers + 0), *(pToCharsPointers + 1));
return 0;
}
此外,如果您能解释双指针如何使用内存中的示例进行可视化,我将不胜感激,因为即使我试图在很多地方阅读它,我也看不到自己。
编辑:感谢大家分享您的答案,这确实有助于理解。当我打印它时,我得到了一个有效的 malloc(0) 指针,并且在多次尝试期间也可以毫无问题地取消引用它。想了解其工作原理。似乎在我的案例中,未定义的行为实际上是预期的行为。