Я лично сам подозреваю что это ошибка с выравниванием данных или типа того.
Компилирую самым обычным способом. Пробовал с флагом -g - тоже самое.
Вот код функции:
NxDataContainer *nx_get_data_from_table_by_field(NxTable *table, int id, int field)
{
NxModelIndex index;
NxListIterator *model_iterator;
NxListNode *model_node;
NxDataModel *model;
void *data;
int i = 0;
model_iterator = nx_list_get_iterator(table->model, NX_START_HEAD);
index.id = id;
index.field = field;
while((model_node = nx_list_next(model_iterator)) != NULL)
{
if(i == field)
{
model = model_node->value;
if((data = nx_dict_fetch_value(table->data, &index)) == NULL) {
nx_list_release_iterator(model_iterator);
return NULL;
}
if(model->type == NX_TYPE_STRING || model->type == NX_TYPE_BINARY) {
model->size = model->max;
}
return nx_create_data_container(model->type, model->size, data);
}
i++;
}
nx_list_release_iterator(model_iterator);
return NULL;
}
Причём если сделать так:
NxDataContainer *nx_get_data_from_table_by_field(NxTable *table, int id, int field)
{
NxModelIndex index;
NxListIterator *model_iterator;
NxListNode *model_node;
NxDataModel *model;
void *data;
int i = 0;
model_iterator = nx_list_get_iterator(table->model, NX_START_HEAD);
index.id = id;
index.field = field;
while((model_node = nx_list_next(model_iterator)) != NULL)
{
if(i == field)
{
model = model_node->value;
if((data = nx_dict_fetch_value(table->data, &index)) == NULL) {
warning("I AM SAY WORK!!!");
nx_list_release_iterator(model_iterator);
return NULL;
}
if(model->type == NX_TYPE_STRING || model->type == NX_TYPE_BINARY) {
model->size = model->max;
}
return nx_create_data_container(model->type, model->size, data);
}
i++;
}
nx_list_release_iterator(model_iterator);
return NULL;
}
тогда работает.