为什么我的2D数组代码使用malloc(0)?

时间:2012-10-28 11:03:32

标签: c arrays malloc

我有一个奇怪的问题:我的代码正在运行。具体来说这是有效的。为什么呢?

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

到底是怎么回事?当我用NULL替换任何malloc或删除它们 它没有用,但似乎没有关系malloc授予它的内容是什么 不是消极的。

3 个答案:

答案 0 :(得分:1)

取消引用无效指针是一种未定义的行为;所以任何事情都可能发生。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

malloc(0)的未定义行为外。出于对齐原因,Malloc实现通常对分配的块具有最小粒度。这意味着任何块总是至少具有4,8,12,16字节的大小,具体取决于实现。如果我记得正确,您甚至可以在某些平台上通过mallopt来设置此值。

另一件事是,分配代码中的缓冲区溢出通常只会在您尝试释放指针时崩溃,因为只有这样才会使用块周围的内存用于库使用的内部簿记。这就是为什么缓冲区溢出难以捕获的原因之一,它们在不同的位置和时间出现在它们发生时。

相关问题