我正在学习链表,并想制作一个多项式的结构表示。节点的创建、插入和删除工作正常,但当试图将值从一个多项式复制到生成的多项式时,我会遇到Unhandled exception ... Access reading violation
错误。为什么这个函数会导致这种情况?
struct Fraction {
int num;
int denom;
};
struct PolyTerm {
int exp;
struct Fraction* coe;
};
struct PolyList {
struct PolyTerm* polyTerm;
struct PolyList* next;
};
typedef struct Fraction Fraction;
typedef struct PolyTerm PolyTerm;
typedef struct PolyList PolyList;
PolyList* test(PolyList* list1, PolyList* list2) {
PolyList* result = (PolyList*)malloc(sizeof(PolyList));
result->polyTerm->exp = (list2)->polyTerm->coe;
result->polyTerm->coe = (list1)->polyTerm->coe;
return result;
}
我已经通过调试器运行了代码,这是程序中断的一行。
result->polyTerm->exp = (list2)->polyTerm->coe;
这是我的堆栈跟踪
Unhandled exception at 0x00DC290A in PolyFun.exe: 0xC0000005: Access violation writing location 0xCDCDCDCD.
为PolyList
结构分配内存时,它只为该结构分配内存。该结构的成员未初始化,指针也不会指向任何有效内存,因此当您取消引用result->polyTerm
时,您正在取消引用未初始化的指针(其值为不确定),从而导致未定义的行为并可能发生崩溃。
您需要初始化该结构,包括使其中的指针指向有效内存。