Я новичок в обучении C, и я тренировался с выделениями памяти и указателями, однако я столкнулся с проблемой, с которой я не могу обойтись. Когда я отлаживаю приведенный ниже код, я получаю сообщение об ошибке «Не удается получить доступ к памяти в адресе» для строки vowelStore [x] = vowelA;C Не удается получить доступ к памяти по адресу
char *DissVowel(char phrase[50])
{
char vowelStore[50];
for(int x=0; x< strlen(phrase); x++)
{
switch(phrase[x])
{
char *vowelA = malloc(sizeof(*vowelA));
case 'a':
vowelA = phrase[x];
vowelStore[x] = vowelA;
free(vowelA);
break;
default:
break;
}
}
return vowelStore;
}
В основном, эта функция принимает в массив символов (строка фразы), затем циклы через каждый символ, и если текущий символ «а», часть памяти выделяется, и «» будет храниться в выделенном пространстве. Затем адрес этого пространства, содержащего «a», будет храниться в отдельном массиве, который будет содержать несколько адресов. Затем функция возвращает этот массив адресов.
Любая помощь очень ценится!
'vowelA = фраза [x];' перезаписала указатель на память, полученный из 'malloc', и создаст предупреждение компилятора для другого типа. Как только вы уничтожили указатель, полученный «malloc», вы не сможете позже «освободить» его. В любом случае 'char * vowelA = malloc (sizeof (* vowelA));' выделяет ** 1 байт ** памяти. –
Массив 'char' не может хранить символ' char * '. (Несвязанный - или, возможно, связанный из-за вашего непонимания указателей), но сам 'vowelA' не должен быть символом' char * ', и ему не нужно быть' sizeof (любой указатель) '.) – usr2564301
'char * vowelA = malloc (sizeof (* vowelA));' Это может быть не выполнено. – BLUEPIXY