malloc和指针问题

Ste*_*ail 1 c malloc pointers

昨天我们在课堂上看到了这个节目,我对它的输出有疑问.

malloc.c:

#include <stdlib.h>

int *create_array(int);

int *create_array(int elements) {
    int i,*x = (int *) malloc(elements*sizeof(int));

    for(i=0;i < elements;i++) {
        x[i] = i;
    }
    free(x);
    return x;
} 

int main(void) {
    int j, *arr;
    arr = create_array(5);
    for(j=0;j<5;j++) {
        printf("%d\n",arr[j]);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

问题(S):

当我运行程序时,我得到这个作为输出:

1627793032
1627793104
2
3
4
Run Code Online (Sandbox Code Playgroud)

但是,前2个元素不应该分别为0和1吗?这里打印的值对我来说就像是记忆地址,对不对?另外,这是由于某些错误造成的undefined behavior吗?

ric*_*ici 5

之后free(x);,指向的值x不再有效.内存可以重复用于其他目的,同时内存分配库可以使用它认为合适的存储.

所以,是的,这是一个导致未定义行为的错误.