C-将SCANF值传递给结构指针分割故障



我要做的只是使用用户输入的结构指针的基本打印。当我尝试使用以下代码时,我得到了segmentation fault。我是新来的C,无论如何谢谢。

typedef struct {
    int *licenseNum;
    char *name;
    char *region;
} City;
typedef struct {
    struct Node *current;
    struct Node *head;
    struct Node *tail;
    struct Node *next;
    struct Node *secondNext;
    City *data;
} Node;

int main()
{
    Node *node = malloc(sizeof(Node));
    City *city = malloc(sizeof(City));
    puts("License number of the City: ");
    scanf("%d", &(node -> data -> licenseNum));
    printf("%d", node -> data -> licenseNum);
    return 0;
}

您没有在node中设置data

Node * node = malloc(sizeof(Node));
City * city = malloc(sizeof(City));
// node->data is not yet defined!
// It has a random value! You must first initialize it:
node->data = city;

也不应在此处使用malloc,因为malloc分配的内存具有随机值。仅在使用struct中的所有指针之前,只需使用malloc,请在使用它们之前具有有意义的值。使用calloc要安全得多:

Node * node = calloc(1, sizeof(Node));
City * city = calloc(1, sizeof(City));
node->data = city;

calloc的工作方式类似于malloc,但它可以保证返回的内存都设置为零(所有int值均为 0,所有指针均为 NULL)。calloc的第一个参数(上面代码中的1)是您要分配的项目数,这只是一个。例如。calloc(5, sizeof(City))将在一个块中分配5个城市的内存,例如:

Cities * cities = calloc(5, sizeof(City));
cities[0].name = "New York";
cities[1].name = "London";
// ... and so on

您没有初始化node->data

您分配了node的内存,但不能为node->data

您可能想这样做:node->data = city

相关内容

  • 没有找到相关文章