我有奇怪的问题:我的代码正在工作。具体而言,这在起作用。为什么?
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
调用设置此值。
另一件事是,缓冲区在分配代码中通常只有在您尝试释放指针时会崩溃,因为只有这样,库周围的内存用于库的内部书籍保留。这就是缓冲区如此难以捕获的原因之一,它们在不同的位置和时间都表现出来。