Вы выделили память для своего char*
, но не выделили память для своего char
для хранения.
Вот правило большого пальца для указателя, каждый * должен иметь malloc, что означает для char **
у вас должен быть один malloc для char *
и еще один для char
.
, также игра с указателем иногда вводит в заблуждение, и вместо этого для удобства чтения следует использовать скобку
char ** nextStringAddress = finalString + stringAddressCounter;
nextStringAddress[stringAddressCounter] = malloc(sizeof **nextStringAddress * 3)
nextStringAddress[stringAddressCounter][0] = 'A';
nextStringAddress[stringAddressCounter][1] = 'a';
nextStringAddress[stringAddressCounter][2] = '\0';
stringAddressCounter++;
Выполнение с одним malloc также возможно, например, так:
char ** nextStringAddress = finalString + stringAddressCounter;
nextStringAddress[stringAddressCounter] = "Aa";
stringAddressCounter++;
Обратите внимание на двойную кавычку здесь вокруг Aa
и пропущенной второй скобки. Следует отметить, что, выполняя это, вы, по сути, назначаете зону памяти, предназначенную только для чтения, и, пытаясь назначить эту память, это приведет к ошибке сегментации.