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

标签 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.

最佳答案

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

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

关于c - 分配新值时出现未处理的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36256609/

相关文章:

c++ - 尝试对链表进行排序时出现左值错误

c - 从多类型堆栈中弹出并获取值(value)

java - 反转链表后对指针的影响

c - 输入 unsigned long long int 是否足够 1 - 10^9 范围?

php - 将数据从 Arduino 发布到网站

c - 在 C 中反转字符串时出现运行时错误

C 链表 : How to insert node at front

java - 为什么 LinkedHashSet 不实现 List?

data-structures - 浏览历史记录背后的数据结构

我们可以使用 union 进行类型转换吗?