Я читал обсуждение того, как malloc
ведет себя, когда вы запрашиваете блок с нулевым размером.
Я понимаю, что поведение malloc(0)
определяется реализацией, и предполагается либо вернуть нулевой указатель, либо ненулевой указатель, который я тем не менее не должен получать. (Это имеет смысл, поскольку нет гарантии, что он указывает на любую полезную память.)
Однако, если a получить такой недопустимый ненулевой указатель, я могу передать его на free
обычным способом? Или это незаконно, поскольку указатель, который я получаю из malloc(0)
, может не указывать на выделенный выделенный блок памяти?
Конкретно, имеет ли следующий код корректное поведение:
#include <stdio.h>
#include <stdlib.h>
int main() {
int* x = (int*) malloc(0);
if (x == NULL) {
printf("Got NULL\n");
return 0;
} else {
printf("Got nonnull %p\n", x);
}
free(x); // is calling `free` here okay?
}