C-为什么我的2D数组代码与Malloc(0)一起使用



我有奇怪的问题:我的代码正在工作。具体而言,这在起作用。为什么?

char **array = malloc(0);
array[0] = malloc(0);
strcpy(array[0],"hello");
array[1] = malloc(0);
strcpy(array[1],"world");

到底是怎么回事?当我用空或删除任何mallocs时它不起作用,但似乎没有重要的价值不是负。

删除无效的指针是不确定的行为;所以一切都会发生。

malloc(0)是实现定义的,并返回空指针或无效的指针。

您正在使用malloc(0)返回的指针来调用未定义的行为。

除了malloc(0)的不确定行为。由于对齐原因,Malloc实施通常对分配的块具有最小的粒度。这意味着,根据实施,任何块总是至少具有4、8、12、16字节的大小。如果我记得正确,您甚至可以在某些平台上使用mallopt调用设置此值。

另一件事是,缓冲区在分配代码中通常只有在您尝试释放指针时会崩溃,因为只有这样,库周围的内存用于库的内部书籍保留。这就是缓冲区如此难以捕获的原因之一,它们在不同的位置和时间都表现出来。

相关内容

  • 没有找到相关文章

最新更新