文字列を配列に格納する時、用意されてる要素数を超える字数を与えてしまうと
他のメモリを食いつぶすから。
だからえむあろっくさんの出番です。
str = (char *) malloc (sizeof(char) * num+1);
えむあろっくさんの恋人はfreeさんです。
freeさんはえむあろっくさんを解放してあげられます。

プログラミング奥深い