C free (): неверный указатель, выделенный в другой функции

Я новичок в StackOverflow. Я учу C указатель сейчас.

Это мой код:

#include <stdio.h>
#include <stdlib.h>

int alloc(int* p){
    p = (int*) malloc (sizeof(int));
    if(!p){
        puts("fail\n");
        return 0;
    }
    *p = 4;
    printf("%d\n",*p);
    return 1;
}

int main(){

    int* pointer;

    if(!alloc(pointer)){
        return -1;
    }else{

        printf("%d\n",*pointer);
    }

    free(pointer);

    return 0;
}

Я компилирую с: gcc -o main main.c

ошибка: свободна (): неверный указатель: 0xb77ac000 ***

что не так с моим кодом?

Ответы на вопрос(5)

Ваш ответ на вопрос