メイン関数に配列を渡し、メイン関数からintを渡す関数があります。この新しい関数内の配列に対して操作を行っています。これをfooと呼びましょう。fooでは、52個のセルですべて0の別の配列を初期化します。メインから渡した配列に対して操作を行い、そのデータを新しく初期化された配列に転送します。新しい配列をメイン関数に戻したい。しかしもちろん、配列のようなデータ構造を返すことはできません。したがって、代わりに、この配列を指すintポインターを返します。int main内で、配列内のさまざまなセルを指すようにポインターを渡します。ポインターが指しているものの結果を出力するとき、それは0または0より大きい整数を指しているはずです。しかし、代わりに、一貫性のない結果が得られます。何らかの理由で、0である必要がある値の一部は、ガベージデータを出力します。私' しばらくの間バグを見つけようとしてきましたが、私はそれを中古で見たかっただけです。とにかく、この部分のコードの一般的なアイデアは次のとおりです...
int main(){
int *retPtr;
char input[] = "abaecedg";
retPtr = foo(input, size);
for(i=0; i<52; i++){
// error displayed here
printf("%d\n", *(retPr + i));
}
}
int foo(char input[], int size)
{
int arr[52] = {0}; // should initialize all 52 cells with 0.
int i=0, value; // looking for non-zero results in the end.
int *ptr = &arr[0];
for(i=0; i<size; i++){
if(arr[i] > 64 && arr[i] < 91){
value = input[i] - 65;
arr[value]++;
}
}
return ptr;
}
うまくいけば、これは私がやろうとしていることを理解するでしょう。foo関数で、特定のアルファベットの頻度を見つけようとしています。これは少しわかりにくいかもしれませんが、コードにはコメントやすべてが含まれているため、できるだけ簡潔にしたいと思いました。一部の値(数値> 0、0)と他の値のガベージ値を取得する理由はありますか?