C 将嵌套结构指针指定给嵌套结构
我有一个实体结构和另一个带指针的结构。程序的目的是将:实体结构分配给具有指针的结构,并使用其他结构指针访问每个实体结构成员 我有一个问题陈述:由于两个结构成员不是对称的,当我用指针将实体结构地址分配给结构时,成员指针初始化会出错并导致系统崩溃 有没有人能找到一种优化的方法来解决这个问题 -----------------------------------------------------------------------节目-----------------------------C 将嵌套结构指针指定给嵌套结构,c,pointers,nested,structure,C,Pointers,Nested,Structure,我有一个实体结构和另一个带指针的结构。程序的目的是将:实体结构分配给具有指针的结构,并使用其他结构指针访问每个实体结构成员 我有一个问题陈述:由于两个结构成员不是对称的,当我用指针将实体结构地址分配给结构时,成员指针初始化会出错并导致系统崩溃 有没有人能找到一种优化的方法来解决这个问题 -----------------------------------------------------------------------节目----------------------------- #in
#include <stdio.h>
#include <string.h>
#include <stddef.h>
/* ===================== Binding Structure ================================= */
typedef struct
{
char id;
}tmodel;
typedef struct
{
char id;
}tbrand;
typedef struct
{
char id;
}tcommercialRef;
typedef struct
{
char id;
}tserialnum;
typedef struct
{
tmodel *smodel;
tbrand *sbrand;
tcommercialRef *scommref;
tserialnum *sslnum;
}tmetadata;
typedef struct
{
tmetadata *smetadata;
}tlink;
typedef struct
{
tlink *slink;
}trefernce;
typedef struct
{
char id[10];
int ttl;
int tss;
trefernce *sref;
}telectrical;
/* ===================== Application Strucuture ==============================*/
void filldata(telectrical *elec);
typedef struct
{
tmodel smodel;
tbrand sbrand;
tcommercialRef scommref;
tserialnum sslnum;
}Ymetadata;
typedef struct
{
Ymetadata smetadata;
}slink;
typedef struct
{
slink glink;
}refernce;
typedef struct
{
char id[10];
int ttl;
int tss;
refernce grefernce;
}gtelectrical;
//solid strucutre object
gtelectrical obj;
//structure pointer object
telectrical *elec = {0};
/* =============================== main.c =================================== */
int main()
{
printf("test");
//static void **p = (void *)&elec;
obj.tss = 55;
obj.ttl = 100;
obj.grefernce.glink.smetadata.smodel.id = 5;
obj.grefernce.glink.smetadata.sbrand.id = 6;
obj.grefernce.glink.smetadata.scommref.id = 7;
obj.grefernce.glink.smetadata.sslnum.id = 8;
elec = (telectrical *)&obj;
//elec structure -> sref pointer goes bad as it's not same type as "grefernce"
//*p = (void *)&obj;
//static long x = (long) offsetof( telectrical, sref);
//(long) offsetof(struct telectrical, sref);
//*(*p + x) = obj.grefernce.glink.smetadata.;
elec->id[0] = 0;
elec->id[1] = 1;
elec->id[2] = 2;
elec->ttl = 5;
elec->tss = 10;
elec->sref->slink->smetadata->sslnum->id = 4;
elec->sref->slink->smetadata->sbrand->id = 1;
elec->sref->slink->smetadata->scommref->id = 2;
elec->sref->slink->smetadata->smodel->id = 3;
//filldata(elec);
printf("------");
printf("%d\n",elec->sref->slink->smetadata->sslnum->id);
printf("%d\n",elec->sref->slink->smetadata->sbrand->id);
printf("%d\n",elec->sref->slink->smetadata->scommref->id);
printf("%d\n",elec->sref->slink->smetadata->smodel->id);
return 0;
}
/* //////////////////////////////////////// user scope ////////////////////////////// */
void filldata(telectrical *pelec)
{
pelec->id[0] = 0;
pelec->id[1] = 1;
pelec->id[2] = 2;
pelec->ttl = 5;
pelec->tss = 10;
//pelec->sref->slink->smetadata->sslnum->id = 4;
//pelec->sref->slink->smetadata->sbrand->id = 1;
//pelec->sref->slink->smetadata->scommref->id = 2;
//pelec->sref->slink->smetadata->smodel->id = 3;
}
#包括
#包括
#包括
/*==============================================================================================================================*/
类型定义结构
{
字符id;
}t模型;
类型定义结构
{
字符id;
}特布兰德;
类型定义结构
{
字符id;
}tcommercialRef;
类型定义结构
{
字符id;
}采石菊;
类型定义结构
{
tmodel*smodel;
t品牌*sbrand;
t商业参考*scommref;
tserialnum*sslnum;
}tmetadata;
类型定义结构
{
tmetadata*smetadata;
}tlink;
类型定义结构
{
tlink*slink;
}特弗伦斯;
类型定义结构
{
字符id[10];
int-ttl;
int tss;
treference*sref;
}远程通信;
/*============================应用程序结构==============================*/
无效填充数据(电信*电子);
类型定义结构
{
tmodel smodel;
特布兰德斯布兰德;
tcommercialRef scommref;
泽里亚努姆;
}水母纲;
类型定义结构
{
斯密塔塔塔水母;
}偷偷摸摸;
类型定义结构
{
斯林克-格林克;
}参考;
类型定义结构
{
字符id[10];
int-ttl;
int tss;
参考灰度;
}GT电气;
//实体结构对象
gtj;
//结构指针对象
telectrical*elec={0};
/*===================================================================================================================*/
int main()
{
printf(“测试”);
//静态无效**p=(无效*)和电气;
obj.tss=55;
obj.ttl=100;
obj.grefernce.glink.smetadata.smodel.id=5;
obj.grefernce.glink.smetadata.sbrand.id=6;
obj.grefernce.glink.smetadata.scommref.id=7;
obj.grefernce.glink.smetadata.sslnum.id=8;
电气=(telectrical*)和obj;
//elec structure->sref指针坏了,因为它与“grefernce”的类型不同
//*p=(无效*)&obj;
//静态长x=(长)偏移量(远距,sref);
//(长)偏移量(结构电信,sref);
//*(*p+x)=对象Greference.glink.smetadata。;
电气->标识[0]=0;
电气->标识[1]=1;
电气->标识[2]=2;
电气->ttl=5;
电气->tss=10;
elec->sref->slink->smetadata->sslnum->id=4;
elec->sref->slink->smetadata->sbrand->id=1;
elec->sref->slink->smetadata->scommref->id=2;
elec->sref->slink->smetadata->smodel->id=3;
//填充数据(elec);
printf(“----”);
printf(“%d\n”,elec->sref->slink->smetadata->sslnum->id);
printf(“%d\n”,elec->sref->slink->smetadata->sbrand->id);
printf(“%d\n”,elec->sref->slink->smetadata->scommref->id);
printf(“%d\n”,elec->sref->slink->smetadata->smodel->id);
返回0;
}
/*///////////////////////////////user scope////////////////////user scope////////////*/
空隙填充数据(telectrical*pelec)
{
pelec->id[0]=0;
pelec->id[1]=1;
pelec->id[2]=2;
pelec->ttl=5;
pelec->tss=10;
//pelec->sref->slink->smetadata->sslnum->id=4;
//pelec->sref->slink->smetadata->sbrand->id=1;
//pelec->sref->slink->smetadata->scommref->id=2;
//pelec->sref->slink->smetadata->smodel->id=3;
}
您没有为指向另一个结构中存在的其他结构的指针分配内存。以下内容可能有助于您进行多级内存分配和分配:
#include<stdio.h>
#include<stdlib.h>
typedef struct A
{
int i;
}A_Node;
typedef struct B
{
A_Node *A_ptr;
}B_Node;
typedef struct C
{
B_Node *B_ptr;
}C_Node;
int main(void)
{
//ACCESSING-MANIPULATING A USING B
B_Node B_obj;
B_obj.A_ptr=malloc(sizeof(*(B_obj.A_ptr)));
(B_obj.A_ptr)->i=192;
A_Node A_obj=*(B_obj.A_ptr); //For checking if the allocation is successful and good
printf("%d\n",A_obj.i);
//ACCESSING-MANIPULATING A USING C
C_Node C_obj;
C_obj.B_ptr=malloc(sizeof(*(C_obj.B_ptr))); //allocating space for struct of B using C object
(C_obj.B_ptr)->A_ptr = malloc(sizeof(*((C_obj.B_ptr)->A_ptr))); //allocating space for struct of A using B Struct for which space was allocated in previous step by C struct
((C_obj.B_ptr)->A_ptr)->i=876;
A_obj=*((C_obj.B_ptr)->A_ptr); //For checking if the allocation is successful and good
printf("%d\n",A_obj.i);
return 0;
}
#包括
#包括
类型定义结构A
{
int i;
}A_节点;
类型定义结构B
{
A_节点*A_ptr;
}B_节点;
类型定义结构C
{
B_节点*B_ptr;
}C_节点;
内部主(空)
{
//使用B访问-A
B_节点B_obj;
B_obj.A_ptr=malloc(sizeof(*(B_obj.A_ptr));
(B_obj.A_ptr)->i=192;
A_节点A_obj=*(B_obj.A_ptr);//用于检查分配是否成功且良好
printf(“%d\n”,A_obj.i);
//使用C访问和操作A
C_节点C_obj;
C_obj.B_ptr=malloc(sizeof(*(C_obj.B_ptr));//使用C对象为B的结构分配空间
(C_obj.B_ptr)->A_ptr=malloc(sizeof(*(C_obj.B_ptr)->A_ptr));//使用在上一步中由C struct分配空间的B struct为A的结构分配空间
((C_obj.B_ptr)->A_ptr)->i=876;
A_obj=*((C_obj.bptr)->A_ptr);//用于检查分配是否成功且良好
printf(“%d\n”,A_obj.i);
返回0;
}
阅读代码并询问是否有任何疑问,类似地,可以在struct中创建这个多级结构(尽管它很难看)。您的前四个结构都只能存储一个字符。我很确定这不是你想问的。你没有为结构
telectrical
中的sref
指针分配任何内存。