好的,我在 Bison .l 文件中有以下代码。顺便说一句,我是 c 的新手。
exp: TK_SLIT // TK_SLIT is a string literal token
/* assigns the type to the nonterminal exp */
$$ ->type = (char *) malloc (strlen ("string") + 1); /* allocates space */
strcpy ($$->type,"string"); /* puts value in there */
printf ("%s\n",$$->type);
printf ("The value of TK_SLIT is - %s\n",$1);
我发现“分配类型”代码块(包括注释在内的 4 行)覆盖了内存中 TK_SLIT($1)的值。TK_SLIT 的值是从我的扫描仪 FLEX 中获取的。
我知道代码块导致了问题,因为如果我注释掉“分配类型”代码块,那么我的 TK_SLIT 令牌值打印得很好。否则会变成乱码。
我的malloc有问题吗?为什么它会覆盖我的令牌值?这是一个野牛问题,它没有保护我在内存中的令牌值吗?
好的,我的工会如下:
%union
{
int intbison;
char *charbison; // used for input
char *boolbison;
int voidbison;
charlist *charlistbison;
arraylist *arraylistbison;
expnode *expnodebison;
}
这也是我的头文件中的expnode:
typedef struct expnode{
char *type;
typesymrec *typesymrecptr;
varsymrec *varsymrecptr;
char *stringval;
int intval;
int boolval;
}expnode;