Вы можете установить height:8px
на первый и второй tr
. И удалите среднюю границу из пустых ячеек в последнем tr
.
.t-table {
border: 1px solid black;
height: 400px;
border-collapse: collapse;
}
.t-table td {
border: 1px solid black;
}
.t-table td:empty {
border-left: 0;
border-right: 0;
}
<table class="t-table">
<tr style="line-height: 8px; height: 8px;">
<td>A</td>
<td>B</td>
</tr>
<tr style="line-height: 8px; height: 8px;">
<td>1</td>
<td>2</td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</table>
Из раздела C99 7.20.3.2: Свободная функция
Сводка
1 #include <stdlib.h>
void free(void *ptr);
Описание
2 Свободная функция заставляет пространство указывать чтобы ptr был освобожден, то есть был предоставлен для дальнейшего распределения. Если ptr является нулевым указателем, никаких действий не происходит .
blockquote>
Это может быть безопасно (я этого не знал, но другие ответы, похоже, предлагают это), но я не буду привыкать к тому, чтобы не заботиться о том, является ли указатель уже нулевым. Назначение p = NULL;
после каждого бесплатного скоро следует в качестве следствия. Это опасно для многопоточных приложений, так как после этого назначения p
может использоваться другим потоком и будет снова освобожден текущим потоком, пока он ожил другими потоками.
Каждая память malloc'd должна быть освобождена один раз. Период.
Что происходит внутри памяти, если мы попытаемся освободить указатель, указывающий на NULL.
blockquote>Ничего.
почему он не показывает никаких сообщений об ошибках / ошибках?
blockquote>Во-первых, поведение действительно по определению, поэтому никакая ошибка или предупреждение не должны быть выданы.
Во-вторых, указатель указывает на NULL во время выполнения. Как отображать предупреждение или сообщение об ошибке, если вообще? Представьте, что вы играете в игру под названием Kill the Zombie, и пока двое из этих существ атакуют вас, появляется сообщение об ошибке всплывающего окна, в котором говорится: «Предупреждение, указатель NULL освобожден».
Я бы пошел за:
#ifdef MY_DOUBTS_HAUNT_ME_IN_MY_DREAMS
#define safe_free(x) do { if ((x)) free((x)); } while(0)
#elseif /* feeling gutsy */
#define safe_free(x) free((x))
#endif
; - ||
free(NULL)
является совершенно законным. Нет смысла проверять NULL
до free
.
– Evan Teran
2 March 2010 в 08:02
Когда-то очень давно существовали реализации «free ()», которые разбились, когда получили пустой указатель на свободный. Это применимо только к реализациям, которые предваряют стандарт C89 (C90), который не был изменен для решения проблемы с тех пор.
По моему опыту, по существу, ни одна из этих реализаций не оставлена (и не должна есть), поэтому теперь безопасно освобождать нулевые указатели.
Если у вас есть какие-либо требования к порту в чрезвычайно странные и древние системы, то, возможно, вам все равно следует проявлять осторожность. С другой стороны, если бы у вас были такие системы, о которых можно было бы беспокоиться, вы, вероятно, знаете об этой проблеме (и о множестве других проблем), или в коде, который указывает это, будут некоторые общие знания.
Из http://linux.die.net/man/3/malloc :
Если ptr равно NULL, операция не выполняется.
blockquote>
NULL
и «нулевым значением указателя». Большинство серьезных и / или официальных документов обычно довольно педантичны (см. Другие ответы).
– AnT
2 March 2010 в 07:47
освобождение нулевого указателя не повлияет на выполнение.
blockquote>