Используйте http://www.ruby-doc.org/stdlib-1.9.3/libdoc/ipaddr/rdoc/IPAddr.html , он выполняет проверку для вас. Просто спасите исключение с помощью false, и вы знаете, что оно недействительно.
1.9.3p194 :002 > IPAddr.new('1.2.3.4')
=> #
1.9.3p194 :003 > IPAddr.new('1.2.3.a')
ArgumentError: invalid address
from /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/ipaddr.rb:496:in `rescue in initialize'
from /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/ipaddr.rb:493:in `initialize'
from (irb):3:in `new'
from (irb):3
from /usr/local/rvm/rubies/ruby-1.9.3-p194/bin/irb:16:in `'
Вы можете заменить вектор пустым - это освободит память.
См. Также Q: Уменьшение вектора
Чтобы добавить к тому, что Джеймс написал. Он хочет сделать следующее:
std::vector<T>().swap(v);
где 'v' - вектор, память которого вы хотите освободить.
Это просто причуда Visual Studio. Деструктор вектора освобождает память, но модуль проверки памяти не всегда ее обнаруживает, поэтому жалуется. Это немного неприятно, но беспокоиться не о чем.