具有结构引用的Seg Fault

时间:2015-04-23 21:21:47

标签: c segmentation-fault gdb

我一直在寻找解决我问题的方法,但我似乎找不到任何问题。我正在为我的课做一个项目,我有一些分段错误,其中一对来自我的代码部分。

typedef struct {
    // Inherited fields from Expr.
    void ( *eval )( struct ExprTag *, Binary *dest );
    void ( *destroy )( struct ExprTag * );

    // Binary value it evaluates to.
    Binary *val;
} ValueExpr;

/** Eval function for ValueExpr. */
static void evalValueExpr( Expr *expr, Binary *dest ) {
    ValueExpr *this = ( ValueExpr * ) expr;

    andBinary( dest, this->val, this->val ); 
}

运行GDB并查找发生分段错误的位置并使用回溯时,我得到以下输出:

(gdb) bt
#0  0x000000000040151e in andBinary (dest=0x6030a0, a=0x0, b=0x0)
    at Binary.c:170
#1  0x0000000000401ac3 in evalValueExpr (expr=0x603080, dest=0x6030a0)
    at Expr.c:22
#2  0x0000000000401eea in evalXorExpr (expr=0x603050, dest=0x603010)
    at Expr.c:200
#3  0x0000000000400f00 in main (argc=1, argv=0x7fffffffe2b8)
    at interpreter.c:272

根据我的理解,我可能错了,当evalValueExpr调用andBinary时会发生seg错误。 a = 0x0且b = 0x0,这是否意味着这个> val为空?如果我能够确定seg故障的来源,我仍然无法理解,我仍然无法解决问题。

为了尝试解决这个问题,我尝试使用

初始化this-> val
this->val = makeBinary( dest->len );

哪个malloc的记忆和一切。但是当我尝试这个时,它说我正在取消引用指向不完整类型的指针。我看了一下,人们一直在谈论结构以及OP如何制造它们。我不确定究竟是什么问题仍然存在。任何帮助表示赞赏。

0 个答案:

没有答案