http://www.st.rim.or.jp/~phinloda/cqa/cqa10.html
Q 【Segmentation violation】
 "Segmentation violation"というメッセージが出てプログラムが
異常終了してしまう。原因は何だろうか。
A
 簡単にいえば、使ってはならないメモリを使おうとした場合に
このようなメッセージが出ます。具体的には、ポインタの使い方を誤ったとか、
printf に指示したフォーマットと与える引数の型が一致しなかったりすると、
このような状況になることがあります。

n_array = (max-1) / 2;
array = (char *)malloc( n_array );
memset( (void *)array, 1, n_array );

ここの部分が原因でしょうか?