Учитывая, что программа вызывает ошибку сегментации, я думаю, что проблема, скорее всего, состоит в том, что структура, обозначенная (указанная) expr->desc.constant
, была повторно использована с тех пор, как было выделено пространство, или, возможно, пространство никогда не выделялось все.
Код демонстрирует различные простительные грехи, такие как использование sprintf()
вместо snprintf()
и безвозмездное выделение 200 байтов для строкового представления числа с плавающей запятой. (Маловероятно, что вам понадобится так много места; в противном случае вам, скорее всего, следует предоставить как минимум на 100 цифр больше, чем у вас, поскольку диапазон экспонент для чисел с плавающей запятой обычно равен +/- 308, и единственная причина нужно 200 символов, чтобы учесть невероятно большие или невероятно маленькие цифры.)
Вы показали, что $$->desc.constant
указывает на то же место, но вы не показали, как распределяется это пространство. Затем вы выделяете пространство строк в $$->desc.constant->base.id
, без четкого выделения пространства для base
.