CIでの動作を理解するつもりですが、目的の宛先へのポインターを使用して、任意の型の配列の内容を出力することが期待されるfunction pointers
関数ポインターを持つ関数に対してこのプログラムを作成しましたが、機能しません。disp_function
ptr
void show_array(void* ptr, void (*disp_function)(void*), int nr_elem) {
int i=0;
while(i<nr_elem) {
(*disp_function) (ptr);
ptr++;
i++;
}
}
プログラムの使用例を次に示します。
void show_movements(Movement* movs, int nr) {
void (*display_function) (void* ptr) = show_movement;
show_array(movs, display_function, nr);
}
void show_movement(void* ptr) {
Movement* ptr2 = NULL;
ptr2 = (Movement*) ptr;
printf("%d -> '%s'\n", ptr2->id, ptr2->title);
}
プログラムは最後の関数でクラッシュします。詳細は次のとおりです。
- 配列には複数の要素があります (> 2)
- 最初のものは正しく印刷されます
- 2 番目の要素を印刷しようとすると、プログラムがクラッシュします (デバッグで確認)。
をptr++
インクリメントしているときにクラッシュが発生していると思います。また、void*
配列構文を使用しようとし(*display_function) (ptr[i]);
ましたが、常にエラーが発生しますinvalid use of void expression
誰でも問題の正確な原因を教えてもらえますか?