我一直在寻找解决我问题的方法,但我似乎找不到任何问题。我正在为我的课做一个项目,我有一些分段错误,其中一对来自我的代码部分。
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-> valthis->val = makeBinary( dest->len );
哪个malloc的记忆和一切。但是当我尝试这个时,它说我正在取消引用指向不完整类型的指针。我看了一下,人们一直在谈论结构以及OP如何制造它们。我不确定究竟是什么问题仍然存在。任何帮助表示赞赏。