Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
结构C中的双解引用_C_Struct_Dereference - Fatal编程技术网

结构C中的双解引用

结构C中的双解引用,c,struct,dereference,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) );

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

#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;
}
#包括
#包括
#包括
类型定义结构点{
int x;
int-y;
}协调;
类型定义结构节点{
协调*协调;
结构节点*urm;
}点头;
int main()
{
NOD*head=malloc(sizeof(NOD));
scanf(“%d”,&head->coord->x);
scanf(“%d”,&head->coord->y);
printf(“%d,%d”,头部->坐标->x,头部->坐标->y);
返回0;
}

通过使用
head->coord
,我成功地只访问了结构的x字段,从我的代码中可以看出这就是问题所在。我已经在第一个结构的第一个字段上,因此无法访问x/y。

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

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

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

您还没有初始化
head->coord
。取消引用未初始化的指针会导致错误。您需要执行以下操作:

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

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

您没有初始化coord变量,因此也应该为malloc留出一些空间

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

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

因此:


只有在要大量交换对象或对象更复杂时,才应该真正创建指向它的指针。

您没有初始化coord变量,因此也应该为它留出一些空间

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

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

因此:


只有当你要大量交换对象或当它是一个更复杂的对象时,你才应该真正地做一个指向它的指针。

你在哪里初始化
head->coord
?尝试一些适当的偏执:
scanf(“%d”,&((head->coord)->y))@OliverCharlesworth谢谢,我没想过。我想我已经用head的初始化来覆盖它。@nica.dan.cs已经这样做了,但是没有用。@nica.dan.cs:这些括号不会改变评估的顺序:它添加了额外的文本,没有效果上的差异。您可能想查看。您在哪里初始化
head->coord
?尝试一些适当的偏执:
scanf(“%d”),&((head->coord)->y)@OliverCharlesworth谢谢,我没想过。我想我已经用head的初始化来覆盖它。@nica.dan.cs已经这样做了,但是没有用。@nica.dan.cs:这些括号不会改变评估的顺序:它添加了额外的文本,没有效果上的差异。您可能需要查看。在这里直接嵌入
COORD
似乎是正确的。如果它是一个包含
COORD
值的数组,那么您也需要一个计数。@JonathanLeffler说我想创建一个COORD数组。如何在数组
COORD**a=malloc(n*sizeof(COORD*))之间创建链接,其中n是x、y对的数量,以及类型节点元素的列表。我在考虑一个for,直到head为NULL,其中head是我列表的开始,在每次迭代中我都做
a[I]->x=head->coord->x
a[I]->y=head->coord->y
。有什么想法吗?@AlexPostolache:假设一个结构像:
typedef struct nod{size\t num\u coords;COORD*COORD;struct nod*urm;}nod,然后定义
NOD*NOD=malloc(sizeof(*NOD));如果(nod==0){…错误…;}nod->coord=malloc(n*sizeof(*nod->coord));如果(nod->coords==0){…错误…;空闲(nod)}nod->num_coords=n;nod->urm=0左右。分配结构使用的坐标数组:
nod->coord[0]
nod->coord[nod->num_-coords-1]
是有效的引用。在这里直接嵌入
coord
似乎是正确的。如果它是一个包含
COORD
值的数组,那么您也需要一个计数。@JonathanLeffler说我想创建一个COORD数组。如何在数组
COORD**a=malloc(n*sizeof(COORD*))之间创建链接,其中n是x、y对的数量,以及类型节点元素的列表。我在考虑一个for,直到head为NULL,其中head是我列表的开始,在每次迭代中我都做
a[I]->x=head->coord->x
a[I]->y=head->coord->y
。有什么想法吗?@AlexPostolache:假设一个结构像:
typedef struct nod{size\t num\u coords;COORD*COORD;struct nod*urm;}nod,然后定义
NOD*NOD=malloc(sizeof(*NOD));如果(nod==0){…错误…;}nod->coord=malloc(n*sizeof(*nod->coord));如果(nod->coords==0){…错误…;空闲(nod)}nod->num_coords=n;nod->urm=0左右。分配结构使用的坐标数组:
nod->coord[0]
nod->coord[nod->num_-coords-1]
是有效的引用。