今日、私は友人のCコードを手伝っていましたが、なぜそれが起こったのか説明できない奇妙な行動を見つけました。整数のリストと各行を含むTSVファイルがありましたint
。最初の行は、リストに含まれていた行数でした。
また、非常に単純な「readfile」を含むacファイルもありました。最初の行は行数であると読み取られn
、次に次の初期化が行われました。
int list[n]
n
そして最後に。のforループfscanf
。
小さいn(〜100.000まで)の場合、すべてが正常でした。ただし、nが大きい場合(10 ^ 6)、セグメンテーション違反が発生することがわかりました。
最後に、リストの初期化を次のように変更しました
int *list = malloc(n*sizeof(int))
非常に大きい場合でも、すべてがうまくいきますn
。
誰かがこれが起こった理由を説明できますか?int list[n]
使用を開始したときに停止したセグメンテーション違反の原因は何list = malloc(n*sizeof(int))
ですか?