この関数が Windows ではクラッシュし、Linux ではうまくいくのはなぜですか?
printf("%d ..... %s", i < count ? i : 0 , string);
パラメータ文字列の代わりに「test」を試すと、メニューがうまくいくので、問題は行にあることがわかりました。文字列インデックスの外側の要素にアクセスしようとしていると思われますが、Windows で発生するだけで、Linux ではセグメンテーション違反信号はありません。
void menu(int count, ...) {
va_list listPointer;
va_start(listPointer, count);
for(int i = 1; i <= count; i++) {
char *string = va_arg(listPointer, char*);
printf("\n%d ..... %s", i < count ? i : 0 , string);
}
va_end(listPointer);
}
これを防ぐ方法はありますか?御時間ありがとうございます。
編集: Linux で実行するために使用するコンパイラは gcc です。しかし、これを Windows (mingw) で実行する必要があります。私がメニューに行う呼び出しはmenu(3, "option1", "option", "option3");
、コード内で一度だけです。