Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于scanf的断层图像分割_C_Segmentation Fault - Fatal编程技术网

基于scanf的断层图像分割

基于scanf的断层图像分割,c,segmentation-fault,C,Segmentation Fault,这里没有问题: 我正试图编写一个简单的菜单界面,但我不断得到一个分割错误,我不知道为什么 #include <stdlib.h> #include <stdio.h> 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

这里没有问题: 我正试图编写一个简单的菜单界面,但我不断得到一个分割错误,我不知道为什么

#include <stdlib.h>
#include <stdio.h>
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;
    }

我在输入两个字段后出现分段错误,在任何菜单选项中,您都需要初始化指针。或者,使用堆栈分配的数组

例如,不使用char*name,而使用char name[20]。请注意,这会将您的输入限制为19个字符;如有必要,请使用较大的缓冲区

现在,您正在将未初始化的指针传递给scanf,这实际上意味着scanf将写入未定义的内存区域。它可能在一次执行中工作,然后在下一次执行中失败。它可能会损坏进程地址空间中其他位置的内存


不要使用未初始化的变量,并考虑将编译器警告提高到它们所能达到的高度;编译器可以捕获这样的错误并发出警告。

而不是使用*name、*password、,。。使用名称[100]、密码[100]、,。。。如果你想要名字,密码。。要成为指针,请在调用scanf之前使用malloc或calloc分配内存。

您尚未为字符串保留任何内存。未初始化的指针是未初始化的指针。