Попробуйте изменить это:
struct port_data_t *port_data = (struct task_data_t*) calloc(4, sizeof(port_data*));
К этому:
port_data = (struct port_data_t*) calloc(4, sizeof(*port_data));
Может работать немного лучше. Если вы объявили port_data
глобальной структурой, вам не нужно повторно объявлять его как struct port_data_t
. GCC должен уже знать это. Конечно, как бы я это сделал, это:
port_data = (struct port_data_t*) calloc(4, sizeof(struct port_data_t));
Но мне не нравится помещать переменные в sizeof()
. Я стараюсь придерживаться там типов, просто по привычке. Кроме того, он разрешает любые неясности относительно того, как именно указатель должен быть разыменован, что в данном случае приводит вас в замешательство.