gpt4 book ai didi

c - 指向 C 中另一个 ADT 内的用户定义的 ADT

转载 作者:太空宇宙 更新时间:2023-11-04 08:55:06 27 4
gpt4 key购买 nike

我用 C 语言创建了一个基于结构的抽象数据类型。在这个结构中,有指向同样基于结构的其他 ADT 的指针。我想知道如何/是否可以正确初始化内部指针并消除内存访问冲突错误。代码如下:

typedef struct insideADT1_S{
int someConstant1;
int someArrray1[500];
} insideADT1_T

typedef struct insideADT2_S{
int someConstant2;
int someArray2[500];
} insideADT2_T

typedef struct outsideADT_S{
insideADT1_T *insidePTR1;
insideADT2_T *insidePTR2;
} outsideADT_T

我创建外部结构并将其传递给一个函数。在函数内部,我尝试获取其中一个内部成员,但我崩溃并出现内存访问错误。示例如下:

outsideADT_T *outsidePTR;
SomeFunction(&outsidePTR);

SomeFunction 的内部结构如下:

void SomeFunction(outsideADT_T *outsidePTR){
//===Fill Array of Inside ADT===//
for (i=0; i<500; i++){
outsidePTR->insidePTR1->someArray1[i] = i; //OOPS! Memory Access Violation! FAIL!
}
}

但是,这样访问会导致内存访问冲突。请注意,我可以通过使用结构版本而不是 ADT 并且不定义指向这些结构的指针来解决问题。例如:

typedef struct outsideADT_S{
struct insideADT1_S insideSTC1;
struct insideADT2_S insideSTC2;
} outsideADT_T

void SomeFunction(outsideADT_T *outsidePTR){
//===Fill Array of Inside ADT===//
for (i=0; i<500; i++){
outsidePTR->insideSTC1.someArray1[i] = i;
}
}

工作正常。为什么第一种方法失败而第二种方法失败?我第一次做错了什么,我该如何解决?

最佳答案

你用一个指向 outsideADT_T 结构(双重引用)的指针调用 SomeFunction,而 SomeFunction 被声明为只接受一个指向该结构的指针(单引用)。试试这个:

outsideADT_T outsidePTR; // <-- notice the lack of '*'
SomeFunction(&outsidePTR);

此外,您取消引用 insidePTR1 而不对其进行初始化。您需要在 SomeFunction 的开头为其分配一些内存:

outsidePTR->insidePTR1 = malloc(sizeof(insideADT1_T));

同样适用于 insidePTR2

关于c - 指向 C 中另一个 ADT 内的用户定义的 ADT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17571777/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com