You want to check i < 3 first; as it stands, it will do a getline() regardless of whether i < 3 or not. Also, IIRC getline() doesn't return a Boolean condition you can loop on. Inside the assignment loop (basically your version of strcpy(), it looks like) you aren't null-terminating the string. Finally, to get the size of a C-string, use strlen().
Just a quick glance (there may be other mistakes) reveals:
1. use strlen() instead of sizeof() for char*
2. Line 30, if you new [], you must delete [] each of your strings
3. to avoid the mess of the inner loop, consider p_str.push( strdup( line.c_str() )); but you must call free() in this case. Or alternatively, just use vector<string> p_str and stuff the strings right in. STL is copy-by-value so it'll do a lot of the work for you.