Я использую структуру данных для реализации проверки орфографии. У меня было две структуры, узел и таблица, которые определены следующим образом:
#include <stdlib.h>
typedef struct node *tree_ptr;
typedef struct table * Table;
struct node
{
char* element;
tree_ptr left, right;
};
typedef struct table
{
tree_ptr head;
int tree_h;
}table;
int main() {
Table t = malloc(sizeof(table));
t->head = NULL;
tree_ptr ptr = t->head;
ptr = malloc(sizeof(tree_ptr));
ptr->element = "one";
ptr->left = NULL;
ptr->right = NULL;
printf("%s\n",t->head->element);
return 0;
}
В этой программе есть ошибка в последней строке функции печати, так как t->head указывает на NULL.
Насколько я знаю, при изменении значения содержимого указателя переменная, на которую указывает указатель, автоматически изменяется.
Поскольку t->head и ptr являются указателями, а ptr указывает на t->head, то есть они указывают на один и тот же объект.
Тогда, когда я меняю значение ptr, почему t->head не меняется так же?? Что я должен сделать, чтобы добиться того, чтобы t- > head менялся при изменении ptr ??
ptr = malloc(sizeof(tree_ptr));
--››ptr = malloc(sizeof *ptr);
о, радость typedefs... счастливая радость радость радость радость... - person wildplasser   schedule 13.02.2016ptr
указывает на сегмент памятиmalloc
ed, аt -> head
по-прежнему указывает наNULL
. - person Spikatrix   schedule 13.02.2016ptr = malloc...
, тогдаptr
больше не будетt->head
. И вы никогда не устанавливаетеt->head
ни в какое другое значение, кроме NULL, поэтому оно остается NULL. - person lurker   schedule 13.02.2016typedef
указатель! - person too honest for this site   schedule 13.02.2016