pi = newは成功しないとtry以降処理されないからtryいらなくね?
後int *err = NULL; *err = 0;は何で調べたら何をしてるかわかる?

生成破棄を対応させろってのはわかるよ