2013-11-06 2 views
1

Я пытаюсь передать указатель на структуру на отдельную функцию. Но когда я иду к компиляции, я получаю warning: passing argument 1 of 'build_network_state' from incompatible pointer typeПередача указателя на struct как аргумент функции

Это в вспомогательной функции в компилирует в моей программе:

typedef struct router { 
    int num; 
    char label[64]; 
    Topology *topology; 
} Router; 

Это из файла .c:

void build_network_state(Router *ptr) { 

    fprintf(stdout, "Hello from router %s\n", ptr->label); 
} 

int main(int argc, char *argv[]) { 

    Router* this_router = malloc(sizeof(Router)); 

    ... 

    fprintf(stdout, "test: %s\n", this_router->label); // output looks fine if I comment the next line 
    build_network_state(&this_router); 
} 
+0

@chux Нет, не совсем. Это потому, что 'this_router' уже имеет тип« Router * ». Оператору address нет необходимости. –

+0

@ H2CO3 Congrats on 100K – chux

+0

@chux Нет проблем. Оставляя мой комментарий здесь в любом случае как информацию для OP. –

ответ

1
build_network_state(&this_router); 

должно быть

build_network_state(this_router); 

, потому что this_router уже относится к типу Router *. (Но &this_router имеет тип Router **)

И

Router* this_router = malloc(sizeof(Router)); 

должен быть

Router* this_router = malloc(sizeof *this_router); 

Вы хотите выделить размер объекта структуры, а не размер указателя на объект структуры ,

+0

Добро пожаловать. +1 для объяснения проблемы в любом случае. –

+0

Спасибо! Это сработало. Я соглашусь, как только SO отпустит меня. – Alex

+0

@ouah Спасибо! :) Это заняло довольно много времени. : P –

1

this_router уже является указателем на структуру маршрутизатора. Вам не нужно передавать адрес на адрес build_network_state.

build_network_state(this_router); 
Смежные вопросы