struct C中的双重引用

时间:2016-09-05 17:47:38

标签: c struct dereference

我有以下代码。看来阅读顺序是错误的。有什么帮助吗?

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct punct{
int x;
int y;
}COORD;

typedef struct nod{
COORD *coord;
struct nod *urm;
}NOD;
int main()
{
  NOD *head= malloc( sizeof(NOD) );
  scanf("%d", &head->coord->x );
  scanf("%d", &head->coord->y );
  printf("%d, %d", head->coord->x , head->coord->y);

  return 0;
}

我已成功设法使用head->coord仅访问结构的x字段,并且从我可以告诉我的代码的问题。我已经在第一个结构的第一个字段上,因此我无法访问x / y。

2 个答案:

答案 0 :(得分:4)

你没有初始化coord变量,所以你也要为它设置一些空间。

head->coord = malloc( sizeof (COORD) );

但在这种情况下,最好将COORD放入NOD而不是引用它!

所以:

typedef struct nod{
   COORD coord;
   struct nod *urm;
}NOD;

当你要经常交换对象或者它是一个更复杂的对象时,你应该只指向它。

答案 1 :(得分:2)

您尚未初始化head->coord。取消引用未初始化的指针会导致undefined behaviour。您需要执行以下操作:

  head->coord = malloc( sizeof (COORD) );

您还应该检查malloc()的失败返回值。