Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Они называются (c) заголовками заголовков и содержат информацию о диапазоне.
Они окружены двойными знаками @@
. Они имеют формат:
@@ -l,s +l,s @@
, где l
- номер стартовой строки, а s
- количество строк, к которым применяется изменение (c) hunk для каждого соответствующего файла. -
указывает исходный файл, а +
указывает новый (измененный) файл. Обратите внимание, что он не только отображает затронутые строки, но и строки контекста.
-1,5
находится в исходном файле (обозначается -
). Он показывает, что первая строка представляет собой начальную и 5 затронутые / контекстные строки
. +1,9
находится в новом (измененном) файле (обозначается +
), а снова первая строка - это начало и 9 затронутых / контекстных линий.
Подробнее здесь: http://en.wikipedia.org/wiki/Diff#Unified_format
Простой примерный анализ
Формат в основном совпадает с унифицированным diff diff -u
.
Например:
diff -u <(seq 16) <(seq 16 | grep -Ev '^(2|3|14|15)$')
Здесь мы удалили строки 2, 3, 14 и 15. Выход:
@@ -1,6 +1,4 @@
1
-2
-3
4
5
6
@@ -11,6 +9,4 @@
11
12
13
-14
-15
16
@@ -1,6 +1,4 @@
означает:
-1,6
: этот фрагмент соответствует строкам с 1 по 6 первого file: 1
2
3
4
5
6
-
означает «старый», как мы обычно вызываем его как diff -u old new
. +1,4
говорит, что этот фрагмент соответствует строкам с 1 по 4 второго файла. +
означает «новый». У нас есть только 4 строки вместо 6, потому что были удалены 2 строки! Новый hunk: 1
4
5
6
@@ -11,6 +9,4 @@
для второго столбца аналогичен:
11
12
13
14
15
16
11
12
13
16
Обратите внимание, что строка 11
является 9-й строка нового файла, потому что мы уже удалили 2 строки в предыдущем hunk: 2 и 3. Hunk header
В зависимости от вашей версии и конфигурации git вы также может получить строку кода рядом с линией @@
, например func1() {
в:
@@ -4,7 +4,6 @@ func1() {
Это также можно получить с флагом -p
plain diff
.
Пример: старый файл:
func1() {
1;
2;
3;
4;
5;
6;
7;
8;
9;
}
Если мы удалим строку 6
, diff показывает:
@@ -4,7 +4,6 @@ func1() {
3;
4;
5;
- 6;
7;
8;
9;
Обратите внимание, что это не правильная строка для func1
: она пропускает строки 1
и 2
.
Эта удивительная функция часто точно указывает, к какой функции или классу относится каждый кусок, что очень полезно для интерпретации diff.
Как алгоритм выбора заголовка работает точно обсуждается at: Откуда берутся отрывки в заголовке git diff hunk?
Они описывают строки, затронутые diff hunk. В вашем случае это означает, что hunk влияет на 5 строк, начиная с строки 1, в результате чего начинается замена в строке 1, длина которой составляет 9 строк.
Обратите внимание, что это формат, используемый унифицированным форматом diff. В классическом формате diff используется другая модель (но кто использует классическую дифференциацию в эти дни?).