書いてから気づいたけど、

誤) malloc(strlen(ptr))
正) malloc(strlen(ptr) + 1)