尝试使用一些参数获得 $4 时出现问题 - YACC -> C

问题描述

当我尝试为另一个条件获取 2 个或更多参数时,我处于堆栈状态。 最大的想法是构建符号表来识别代码中的错误,我正在构建一棵树,但现在我们需要构建表,但我不想使用这棵树.. 所以我尝试与我制作的 LinkList 一起使用。 这是我在 c 中的链接列表:

<FormComponent createtoDOhandler={this.createtoDO()} />

不好意思说的不是很清楚,我会试着用例子来解释。

这里是我的一些情况:

<FormComponent createtoDOhandler={this.createtoDO} />

这是构建链接列表的函数

    typedef struct linkList {
        char* data;
        struct linkList* next;
}linkList;

我尝试返回链接列表但它不起作用..所以我尝试将所有参数发送到一个列表。 在“Funct”条件下,您可以看到我调用函数 buildLinkList,我发送了 $2,$4,$7,$9。

$2- 我可以将它“缓存”在我的列表中并成功打印它..但是 $4 是“参数”并且它返回给我一些变量,当我尝试打印它时,我无法将它们推送到我的列表中我得到垃圾。 我尝试了很多方法来传递它和其他想法,请帮助我破解它,其他想法将受到欢迎。

谢谢!

解决方法

我相信问题就在这里(以及相关的行):

link1->data = (char*)malloc(sizeof(d1)+1);

这里,sizeof(d1) 为您提供名为 d1指针的大小,而不是它指向的字符串的大小。对于长度超过指针大小的字符串,这会为您随后复制的字符串分配不足的空间。

要解决此问题,请将 sizeof(d1) 更改为 strlen(d1)。或者,考虑使用 strdup,它既分配您需要的空间,又将字符串内容复制到该空间中。