私は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」である場合、メモリピースが割り当てられ、「」意志割り当てられた領域に格納されます。次に、「a」を含むこのスペースのアドレスは、複数のアドレスを含む別のアレイに格納されます。この関数は、このアドレスの配列を返します。
ご協力いただきありがとうございます。
'vowelA = phrase [x];'は、 'malloc'から得られたメモリへのポインタを上書きし、別の型であるというコンパイラの警告を生成します。 'malloc'で得られたポインタを一旦破棄すると、後で' free'することはできません。いずれの場合でも 'char * vowelA = malloc(sizeof(* vowelA));'はメモリの1バイト**を割り当てます。 –
'char'配列は' char * 'を格納できません。 (関連性がない - あるいはあなたのポインタの不一致のためにおそらく関連しますが、 'vowelA'自体は' char * 'である必要はなく、 'sizeof(任意のポインタ)'である必要はありません。) – usr2564301
'char * vowelA = malloc(sizeof(* vowelA));'これは実行されないかもしれません。 – BLUEPIXY