Segmentation Fault が起こるプログラム外部要因

– ulimit -s で得られる、スタックの限界サイズを超えた場合、最初の代入を行った時点で Segumentation Fault (core dumped) になる。
例えば、

$ ulimit -s
65536

の時、次のようなコードで発生する。

/* オプティマイズされると処理がなくなるため、
 * gcc -O0 を付けてコンパイルすること。
 */
int main(int argc, char* argv[]){
    char ac[64 * 1024 * 1024];
    ac[0] = ‘\0’; // ここで発生
    return 0;
}

対策は、

ulimit -s [limit]

で十分なスタックサイズを確保することを許可すればよい。