Почему я не могу правильно хранить двойной указатель и ссылаться на него?
Этот код работает:
#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;
будет работать, но, видимо, это не так.
Также я хотел бы отметить, что я знаю, что создание указателя или двойного указателя непосредственно в структуре обычно считается плохой практикой, но это часть задания, и определение структуры было дано и должно использоваться «как есть». Конечной целью является создание массива или связанных списков. Часть связанных списков будет найдена, как я думаю, я понимаю, но это проблема.
------------------------------- РЕДАКТИРОВАТЬ ------------------ ------------------
Я изменил свой код на это:
#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;
}
но моя программа все еще падает.
**
на*
и все заработает. (Вы объявили массив указателей на структуру.) - person Paul Ogilvie   schedule 22.01.2019double*
. - person Keith Thompson   schedule 22.01.2019