> ptr = (char*)malloc(size+1);

この+1はなに?
本題とは関係ないけど