Это может быть безопасно (я этого не знал, но другие ответы, похоже, предлагают это), но я не буду привыкать к тому, чтобы не заботиться о том, является ли указатель уже нулевым. Назначение p = NULL;
после каждого бесплатного скоро следует в качестве следствия. Это опасно для многопоточных приложений, так как после этого назначения p
может использоваться другим потоком и будет снова освобожден текущим потоком, пока он ожил другими потоками.
Каждая память malloc'd должна быть освобождена один раз. Период.
Вы можете попробовать использовать следующий шаблон регулярных выражений:
^[^@]+@[^.]+[.][^.]{2,}([.][^.]{2,})*$
Самая правая часть шаблона означает:
[.] match a literal dot
[^.]{2,} followed by a domain component (any 2 or more characters but dot)
([.][^.]{2,})* followed by dot and another component, zero or more times
Так что это будет соответствовать:
jon.skeet@google.com
jon.skeet@google.co.uk
Но не будет соответствовать:
gordonlinoff@blah
Боже, мы хакеры и проверяем вещи! Более того, мы понимаем такие понятия, как соответствие ACID, целостность данных и отдельные точки авторитета. Очевидно, что мы должны убедиться, что недействительные электронные письма не попадают в БД. Что еще? У нас есть такой замечательный инструмент для этого: правильная схема с проверочными ограничениями!
К сожалению, электронные письма являются одной из тех деталей, которые общеизвестно трудно проверить с помощью простых регулярных выражений. Это возможно возможно , обязательно . Нет, на самом деле это не так. Ни одна из этих ссылок не обеспечивает 100% соответствия.
Гораздо лучший подход - просто проверить адрес, отправив ему электронное письмо с кодом активации. Дэвид Гилбертсон объясняет это гораздо лучше , чем я собираюсь в кратком SO-ответе, но основные моменты:
Даже не пытайтесь проверить.
Просто протестируйте адрес с реальным адресом электронной почты.
Для моих проектов, как личных, так и профессиональных, это регулярное выражение, которое я использую для проверки работоспособности адреса электронной почты перед отправкой письма активации / подтверждения:
\S+@\S+
Это очень просто (и да, все еще исключает некоторые технически действительные адреса электронной почты), чрезвычайно прост в отладке и работает для любого законного трафика на наши сайты. (Я еще не видел адрес электронной почты, даже похожий на #!$%&’*+-/=?^_{}|~@example.com
в наших журналах.)