2015-06-04 3 views
2

Я пытаюсь инициализировать указатель структуры с другим указателем структуры внутри программирования C, иначе я получаю ошибку сегментации. Структура определяется следующим образом:Как инициализировать указатель структуры с другим указателем структуры внутри C?

`struct gfcontext_t{ 
    char *fileContent; 
    size_t fileLength; 
    char *response; 
    int socket_hd; 
}; 

struct gfserver_t{ 
    char *serverName; 
    int serverPort; 
    int maxConnection; 
    ssize_t (*handler)(struct gfcontext_t *, char *, void *); 
    struct gfcontext_t *ctx; 
    int status; 
}; 

инициализации дают внутри функции:

gfserver_t * gfserver_create(){ 
    struct gfserver_t *gfs; 
    gfs=(gfserver_t*) malloc(sizeof(struct gfserver_t)); 
    ......//how to do the initialization? 
    return gfs; 
}` 
+1

Стандартное предупреждение: Пожалуйста, [не использовать] (http://stackoverflow.com/q/ 605845/2173917) возвращаемое значение 'malloc()' и family в 'C'. –

+3

'// как сделать инициализацию?' ... показать существующие усилия, пожалуйста, –

+0

Стандартное предупреждение №2: Пожалуйста, не используйте компилятор C++ для компиляции кода C. Если вам нужно использовать некоторый код C в своем проекте на C++, скомпилируйте C-код (используя компилятор C) в качестве статического или динамического объектного файла, а затем соедините этот объектный файл с вашим проектом на C++ при компиляции кода на C++ (используя компилятор C++). – Sebivor

ответ

1

Использование:
gfs->ctx = malloc(sizeof(struct gfcontext_t));
или если вы хотите, чтобы инициализировать члены gfcontext_t к null
gfs->ctx = calloc(1, sizeof(struct gfcontext_t));

+2

Или 'gfs-> ctx = calloc (1, sizeof * gfs-> ctx);' – JeremyP

+0

@JeremyP Правильно, это даже лучше, 't должен заботиться о типе 'ctx' :-) – axxis