Почему я не могу правильно хранить и ссылаться на двойной указатель?
Этот код работает:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct _node{
int nodeNumber;
int weight;
}* Node;
int main(int argc, char **argv){
Node nodeList = calloc(3, sizeof(struct _node));
// Used for testing
nodeList->nodeNumber = 9;
printf("Node Number: %d\n", nodeList->nodeNumber);
return 0;
}
, но когда я пытаюсь сделать структуру двойным указателем и ссылаться вот так:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct _node{
int nodeNumber;
int weight;
}** Node;
int main(int argc, char **argv){
Node nodeList = calloc(3, sizeof(struct _node));
// Used for testing
nodeList[0]->nodeNumber = 9;
printf("Node Number: %d\n", nodeList[0]->nodeNumber);
return 0;
}
Моя программа работает секунду, а затем вылетает.Нет ошибок или чего-то еще.Я думал, что ссылка на структуру с
nodeList[0]->nodeNumber = 9;
будет работать, но, очевидно, это не так.
Также я хотел бы отметить, что я знаю, что создание указателя или двойного указателя непосредственно в структуреобычно считается плохой практикой, но это является частью назначения, и определение структуры было дано и должно использоваться "как есть".Конечная цель - создать массив или связанные списки.Часть связанных списков будет найдена, так как я думаю, что понимаю, но это проблема.
------------------------------- РЕДАКТИРОВАТЬ ------------------------------------
Iизменил мой код на это:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct _node{
int nodeNumber;
int weight;
}** Node;
int main(int argc, char **argv){
Node nodeList = malloc(sizeof(struct _node *));
// Used for testing
nodeList[0]->nodeNumber = 9;
printf("Node Number: %d\n", nodeList[0]->nodeNumber);
return 0;
}
но моя программа все еще падает.