У меня возникли проблемы с некоторым кодом на C, и мне действительно нужна ваша помощь. Ну у меня есть эти 2 структур (они просят, чтобы быть, как это так, мы не можите изменить их)динамический массив с указателями на узлы структуры
struct node{
struct list_node **table;
int table_size;
};
struct list_node{
int num;
struct list_node *ptr;
};
и как вы можете видеть в первом мы имеем массив, с указателями в узлах нашего список. в основном, мы создаем необходимый объем памяти, чтобы начать как этого
struct node *nodeT;
struct list_node *root, *curr, **temp;
root = (struct list_node*)malloc(sizeof(struct list_node)); // root node of list
nodeT = (struct node*)malloc(sizeof(struct node)); // single node
nodeT->table = (struct list_node**)malloc(sizeof(struct list_node*));
nodeT->table_size = 0;
, а затем я создающий список по
for(i=0 ; i<X ; i++){ // X is important for the errors and i'll explain why
curr = (struct list_node*)malloc(sizeof(struct list_node));
curr -> num = (i+1);
curr -> ptr = root;
root = curr;
}
сейчас, я бег по списку и я расширить массив в первой структуре для everysingle list node i find, чтобы ввести указатель на соответствующий узел.
for(curr=root ; curr!=NULL ; curr=curr->ptr){
nodeT->table[nodeT->table_size] = curr;
nodeT->table_size++;
temp = (struct list_node**)realloc(nodeT->table , nodeT->table_size*sizeof(struct list_node *));
if(temp!=NULL)
nodeT->table = temp;
else{
printf("Memory error\n");
return 1;
}
}
я использовать эту структуру list_node ** Темп держать безопасную NODET и после проверки, если все в порядке, я снова поставил температуру в NODET, в противном случае я остановить программку. В конце я распечатаю содержимое списка через указатели массива, подобные этому
for(i=0 ; i<nodeT->table_size ; i++)
printf("-> %d ", nodeT->table[i]->num);
printf("\n");
и я выхожу из программы. парадокс в этом заключается в том, что для X 1-4 все работает нормально, но для 5+ есть проблема, и я получаю сообщение
«** обнаружено glibc * ./dynamix_table_realloc: realloc(): недействительный следующий размер: 0x0000000000819050 * "
и еще около 20 строк, которые действительно не помогают мне. Надеюсь, вы это сделаете, и именно поэтому я разместил это. Заранее спасибо!