diff --git a/src/ice_transport.cpp b/src/ice_transport.cpp
index 060311c13da7e1fb6766717f0dd0749f8c8cf45f..cd7cdca7d2fe7ba3e05fd465fc2f60c4fd227e75 100644
--- a/src/ice_transport.cpp
+++ b/src/ice_transport.cpp
@@ -129,7 +129,7 @@ public:
     // Generate server reflexive candidates using UPNP mappings.
     std::vector<std::pair<IpAddr, IpAddr>> setupUpnpReflexiveCandidates();
     void setDefaultRemoteAddress(unsigned comp_id, const IpAddr& addr);
-    const IpAddr getDefaultRemoteAddress(unsigned comp_id) const;
+    IpAddr getDefaultRemoteAddress(unsigned comp_id) const;
     bool handleEvents(unsigned max_msec);
     int flushTimerHeapAndIoQueue();
     int checkEventQueue(int maxEventToPoll);
@@ -528,9 +528,6 @@ IceTransport::Impl::initIceInstance(const IceTransportOptions& options)
             handleEvents(HANDLE_EVENT_DURATION);
         }
     });
-
-    // Init to invalid addresses
-    iceDefaultRemoteAddr_.reserve(compCount_);
 }
 
 bool
@@ -1084,12 +1081,13 @@ IceTransport::Impl::setDefaultRemoteAddress(unsigned compId, const IpAddr& addr)
     iceDefaultRemoteAddr_[compId - 1].setPort(0);
 }
 
-const IpAddr
+IpAddr
 IceTransport::Impl::getDefaultRemoteAddress(unsigned compId) const
 {
     ASSERT_COMP_ID(compId, compCount_);
-
-    return iceDefaultRemoteAddr_[compId - 1];
+    if (compId < iceDefaultRemoteAddr_.size())
+        return iceDefaultRemoteAddr_[compId - 1];
+    return {};
 }
 
 void
@@ -1379,9 +1377,8 @@ IceTransport::getRemoteAddress(unsigned comp_id) const
     // Note that the default remote addresses are the addresses
     // set in the 'c=' and 'a=rtcp' lines of the received SDP.
     // See pj_ice_strans_sendto2() for more details.
-
-    if (pimpl_->getDefaultRemoteAddress(comp_id)) {
-        return pimpl_->getDefaultRemoteAddress(comp_id);
+    if (auto defaultAddr = pimpl_->getDefaultRemoteAddress(comp_id)) {
+        return defaultAddr;
     }
 
     return pimpl_->getRemoteAddress(comp_id);