分配新值时出现未处理的异常?

时间:2016-03-28 05:37:50

标签: c linked-list

我正在学习链接列表,并希望对多项式进行结构表示。节点的创建,插入和删除工作正常,但是当尝试将值从一个多项式复制到结果中时,我会遇到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.

1 个答案:

答案 0 :(得分:3)

PolyList结构分配内存时,它只为该结构分配内存。该结构的成员未初始化,并且指针不会指向任何有效的内存,因此当您取消引用result->polyTerm时,您将取消引用未初始化的指针(其值为 indeterminate ),从而导致< em>未定义的行为并且可能会崩溃。

您需要初始化结构,包括使其中的指针指向有效的内存。