代码之家  ›  专栏  ›  技术社区  ›  nemo

在结构中取消指针对指针的引用时出现segfault

  •  0
  • nemo  · 技术社区  · 7 年前

    我有一个结构,其中包括一个指向指针的指针,它是指针的成员之一。当我试图解引用这个指针时,我总是会出错。

    在中创建人员 person_init 给它起个名字(约翰)。名称是指向字符串的指针。我可以 printf() 这个功能没有问题。回到 main() 功能,我也可以 打印f() 名字没问题。但是什么时候 我输入一个新函数并尝试 打印f() 我有段错误。我真的很困惑,因为我很确定 name 正在堆上分配。

    我这里缺什么?

    代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    /* structure with a pointer to pointer member */
    struct person {
        char **name;
    };
    
    
    /* allocate space for the strucutre */
    int person_init(struct person **p)
    {
        struct person *newp = malloc(sizeof(struct person));
    
        /* give a name, allocated on the heap */
        char *name = malloc(sizeof(char) * 5);
        *name = 'J';
        *(name + 1) = 'o';
        *(name + 2) = 'h';
        *(name + 3) = 'n';
        *(name + 4) = '\0';
        newp->name = &name;
        *p = newp;
    
        printf("Name in init: %s\n", *(*p)->name); /* this works */
    
        return 0;
    }
    
    
    void print_name(struct person *p)
    {
        printf(*p->name);
    }
    
    
    int main()
    {
        struct person *person;
        person_init(&person);
        printf("Name in main: %s\n", *person->name);   /* works */
        print_name(person);                            /* segfault */
    }
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   melpomene    7 年前

    newp->name = &name;
    

    newp->name name person_init

    struct person {
        char *name;
    };
    

    newp->name = name;