falla de segmentación usando scanf

pregunta noob aquí: estoy tratando de escribir una interfaz de menú simple, pero sigo recibiendo un error de falla de segmentación y no puedo entender por qué.

#include  #include  int flush(); int add(char *name, char *password, char *type); int delete(char *name); int edit(char *name, char *password, char *type, char *newName, char *newPassword, char *newType); int verify(char *name, char *password); int menu(){ int input; char *name, *password, *type, *newName, *newPassword, *newType; printf("MAIN MENU \n ============\n"); printf("1. ADD\n"); printf("2. DELETE\n"); printf("3. EDIT\n"); printf("4. VERIFY\n"); printf("5. Exit\n"); printf("Selection:"); scanf("%d", &input); flush(); switch (input){ case 1: printf("%s\n", "Enter Name:"); scanf("%s", name); flush(); printf("%s\n", "enter password" ); scanf("%s", password); flush(); printf("%s\n","enter type" ); scanf("%s",type); add(name, password, type); menu(); break; case 2: printf("Enter Name:" ); scanf("%s",name); flush(); delete(name); menu(); break; case 3: printf("Enter Name:\n"); scanf("%s",name); flush(); printf("Enter Password\n"); scanf("%s", password); flush(); printf("enter type:\n"); scanf("%s", type); flush(); printf("enter your new username:\n"); scanf("%s",newName); flush(); printf("enter your new password\n"); scanf("%s", newPassword); flush(); printf("enter your new type\n"); scanf("%s",newType); flush(); edit(name, password, type, newName, newPassword, newType); menu(); break; case 4: printf("Enter Name\n"); scanf("%s",name); flush(); printf("Enter Password\n"); scanf("%s",password); flush(); verify(name, password); menu(); break; case 5: return 0; default: printf("invalid input, please select from the following:\n"); menu(); } return 0; } int flush(){ int ch; while ((ch = getchar()) != EOF && ch != '\n') ; return 0; } 

Recibo el error de segmentación después de ingresar dos campos, en cualquier opción de menú

Necesita inicializar sus punteros. Alternativamente, use matrices asignadas a la stack.

Por ejemplo, en lugar de char *name , haz char name[20] . (Tenga en cuenta que esto limitará su entrada a 19 caracteres, use un buffer más grande si es necesario).

En este momento, está pasando punteros no inicializados a scanf() que significa que scanf() va a escribir en un área indefinida de la memoria. Podría funcionar en una ejecución y luego fallar en la siguiente. Podría dañar la memoria en otro lugar del espacio de direcciones del proceso.

No utilice variables no inicializadas, y considere subir sus advertencias de comstackción lo más alto posible; el comstackdor puede detectar errores como este y emitir una advertencia.

En lugar de usar * nombre, * contraseña, … use nombre [100], contraseña [100], … Si desea que el nombre, contraseña, … sea un puntero, luego asigne memoria usando malloc o calloc antes de llamar a scanf.