#bison
#bison
Вопрос:
idlist : idlist ',' ID {
$$.str=$3.str;
$$.ptr=(idtype*)amp;$1;
}
| ID {
$$.str=$1.str;
$$.ptr=NULL;
}
idlist здесь имеет тип idtype . Я новичок в Yaac. Я делаю что-то глупое, потому что мой код перебирает один идентификатор. когда я использую это на один уровень выше.
Итак, здесь грамматика имеет тип после идентификатора. Я мог бы использовать для этого стек, но я подумал, что это мило.
Ответ №1:
Проблема в том, что вы берете адрес $1
, который является локальным временным, существующим только для этого действия правила. Таким образом, после завершения действия оно исчезает, оставаясь $$.ptr
висячим и указывая на память, которая будет повторно использована для чего-то другого.