ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態で、
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。
[]で囲まれていないcodeや/codeは、codeタグではありません。
ワド さんが書きました: ↑3年前
参考書に書いてあるコードを書いていたのですが、配列に不定定数を入れる部分でエラーが出ており、これの直し方がわかりません。
これは可変長配列(Variable-Length Array)といい、C99では必ず認められ、C11ではオプションの仕様です。
したがって、対応するコンパイラ(gccなど)をC99モード(gccなら-std=c99)で用いるといいでしょう。
ワド さんが書きました: ↑3年前
mallocを使用して試しているのですが、上手く動きません。
i=0のときもset(&nums[i], &nums[0]);をしているため、
自分への辺ができてしまい、無限ループになってしまいます。
forループをi=0ではなくi=1から始めるようにするといいでしょう。
このことにより、通常argv[0]として与えられる実行ファイルのファイル名を
数値として処理しようとすることも回避できます。
さらに、mallocが成功したかを確かめるため、戻り値がNULLでないかをチェックし、
もしNULLであったらその後の処理を中止するような処理を入れるといいでしょう。
ワド さんが書きました: ↑3年前
また逆参照になってしまっている部分,バッファオーバーランしている部分、についても直し方がわからないので、教えてほしいです。
「逆参照」をググったところ、間接参照と同じような意味であり、悪いことではなさそうです。
「逆参照になっている部分」のうち、
コード:
while (min->bigger) //逆参照になっている部分
{
min = min->less_equal;
}
については、条件をmin->biggerではなくmin->less_equalにするといいでしょう。
他の2箇所については、特に直さなくてよさそうです。
また、「バッファオーバーランしている部分」についても、
特に範囲外アクセスになりそうな処理は見られず、直さなくてよさそうです。