Память, возвращаемая malloc
, не инициализирована. Поэтому, когда вы выделяете пространство для структуры, используя malloc
:
componentA_t *a = malloc(sizeof(componentA_t));
Затем проверьте поле этой структуры:
if(a->component.idx == 0){
Вы читаете неинициализированное значение. Так что это может быть 0 или любое другое значение.
Эта проверка не нужна, просто удалите ее:
componentA_t *componentA_init(){
componentA_t *a = malloc(sizeof(componentA_t));
a->component.idx = idxgiver;
idxgiver++;
return a;
}
componentB_t *componentB_init(){
componentB_t *b = malloc(sizeof(componentB_t));
b->component.idx = idxgiver;
idxgiver++;
return b;
}
Также обратите внимание, что idxgiver
явно не инициализируется, но, поскольку он определен в области видимости файла, он неявно инициализируется равным 0.