Я новичок в C, и это мой первый вопрос: для этой структуры:Указывает ли указатель на массив указателя на struct, если он установлен в NULL, выделяет память?
typedef struct Branch
{
Tree * thisTree;
struct Branch * nodes[];
} Branch;
, кажется, работает нормально, если я делаю следующее:
Branch branch1;
branch1->nodes[0] = NULL;
даже если я не выделяет память для указателя Н.Р. 0 в массиве таким образом:
branch->node[0] = (Branch *) malloc(sizeof(Branch *));
если я проверить этот код:
if (branch1->nodes[0] == NULL)
printf("is NULL");
печатает на выход: есть NULL
Так что мой вопрос: уже там была выделена память для указателя?
branch1->nodes[0]
, потому что у меня есть много структур, и если я инициализирую каждую ветвь с фиксированным числом указателей Я получаю много выделенных данные (если я проверю с функцией SizeOf). Это так: установка в NULL (выше) неправильного способа мышления?
Моя проблема заключается в том, что выделение памяти для указателя составляет 4 байта. Итак, не имея объявленного количества указателей в массиве, когда он выделяет для него память? К сожалению я пытался держать вопрос простой, но мне нужно, чтобы достичь строки через указатель структуры в соседней ветке
это означает, что структура я использую
typedef struct Branch
{
Tree * thisTree;
char *string;
struct Branch * nodes[];
} Branch;
Так что, если я не
branch->node[0] = (Branch *) malloc(sizeof(Branch *));
и чем
branch->node[0]->String = strdup("text");
Ошибка ошибки компилятора.
Не ввергнуть результат из 'malloc' & друзей в С. – Olaf
Вы сделали. C не является Java или Python и т. Д. Указатель не является ссылкой, а является первоклассным объектом. Используйте valgrind. Простое сравнение может даже работать, если вы этого не сделали, вы не можете полагаться на _undefined behaviour_ ** not **, чтобы дать правильный результат. – Olaf
Мне нравятся эти отливки. –