我试图模仿一个构造函数。我试图通过让父结构体具有返回指向子结构体的指针的函数指针来做到这一点。任何帮助将非常感激。

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

typedef struct child_t {

  char *name;

} Child;

typedef struct parent_t {

  Child (*NewChild)();

} Parent;

Child *NewChild() {
  Child *child = malloc(sizeof(Child));

  child->name = "foo";

  return child;
}

int
main()
{
  Parent parent;

  Child child = parent.NewChild();
}

最佳答案

我想你的意思是

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

typedef struct child_t {

  char *name;

} Child;

typedef struct parent_t {

    Child * ( *NewChild )( void );

} Parent;

Child * NewChild( void )
{
    Child *child = malloc( sizeof( Child ) );

    child->name = "foo";

    return child;
}

int main( void )
{
    Parent parent = { NewChild };

    Child *child = parent.NewChild();

    puts( child->name );

    free( child );
}

程序输出为
foo

那就是你应该正确地声明函数。它的返回类型必须是一个指针。因此,您必须在结构定义中正确声明函数指针
typedef struct parent_t {

  Child (*NewChild)();
  ^^^^^^
} Parent;

并且您需要初始化类型为Parent的对象。
Parent parent = { NewChild };

否则,它具有不确定的值。

关于c - 分段故障: 11 when returning stuct via function pointer in struct,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31566927/

10-11 23:00