我在 C 中创建了一个基于结构的抽象数据类型。在这个结构中,有指向其他 ADT 的指针,这些 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;
}
}
工作正常。为什么第一种方法失败,而第二种方法没有?我第一次做错了什么,我该如何解决?