Bleh, I wrote a dynamic C array and wouldn't advise using realloc. There's a chance of losing data.
No theres not, unless:
a) You're doing it wrong.
b) Theres not enough RAM available on heap; this will however return an error which you can deal with.
I've used realloc to create a resizing binary heap which is currently being used every day on an extremely active business application -- never had a single error or amnesic episode. Also there are no std library c/c++ functions that will have a chance of not working properly. In fact on the official C++ website:
"The content of the memory block is preserved up to the lesser of the new and old sizes, even if the block is moved."
The memory is GUARANTEED to be preserved.
Here is some example code of correct usage I wrote for the above mentioned application:
//check if the heap is full
if (h->index >= h->blockSize) //if the index is the block size, it is pointing outside the block and the block is full
{
  //if the heap is at capacity, return with error
    if (h->blockSize >= MAXELEMENTS){
      puts("Error: The heap has reached its maximum size");
      return;
    }
    //otherwise resize the heap
    // try to reallocate
    printf("%d\\n", h->index);
    void* temp = realloc(h->block, sizeof(ELEMENT)*h->blockSize+BLOCKINCREMENT);
    if (temp == NULL){ //if reallocate fails, report the error, then end the function
      puts("Could not realloc memory");
      return;
    }
    //if reallocate is successful, update state variables
    h->blockSize += BLOCKINCREMENT; //incremenet the size
    h->block = temp; //get the new block
  }