Much of your code doesn't make much sense. You allocate and delete rather haphazardly often undoing what you did just a few lines earlier.
Try something like this instead:
char * ReadString()
{
long aSize = 10;
long numChars = 0;
char * pNames;
char * pTemp;
char c;
pNames = new char[aSize + 1];
while((c = cin.get()) != '\n')
{
if(numChars >= aSize)
{
aSize *= 2;
pTemp = new char[aSize + 1];
memcpy(pTemp, pNames, numChars);
delete[] pNames;
pNames = pTemp;
cout << "Array size increased to " << aSize << endl;
}
pNames[numChars++] = c;
}
pNames[numChars] = '\0';//end of string
return pNames;
}