В вашем коде несколько ошибок:
1) После realloc
размер массива func->parameters
равен func->parameterAmount
. Таким образом, это означает, что последний индекс, который вы можете использовать func->parameterAmount-1
:
func->parameters[func->parameterAmount - 1]
2) Для каждого элемента в массиве func->parameters
, вы должны выделить строку value
(потому что в этот момент value
это просто указатель на символ):
int i = 0;
int n = 129; // n will be the max length (minus 1) of newly allocated string
for (i = 0; i < func->parameterAmount; ++i) {
func->parameters[i].name = (char *) malloc(sizeof(char) * n);
if (func->parameters[i].name == NULL) {
// Handle alloc error
}
}
Кроме того, не забудьте выделить все строковые переменные value
внутри токена array
.
3) В C вы не может присвоить значение строке таким образом. Вы должны использовать strcpy()
из string.h
header:
strcpy(func->parameters[func->parameter_amount].name, tokens[i+1].value);