>Is it wrong to call exit(1) when a failed memory request happens
No, but it sure isn't portable because the only portable arguments to exit (and operands to return) are 0, EXIT_FAILURE, and EXIT_SUCCESS. 1 doesn't factor in there.

>since there may be dynamically allocated memory that exists elsewhere in the program that won't get freed?
That would be a problem, yes. The trick is to make sure you free all memory allocated prior to the error before terminating.