Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
CFLAGS является переменной, которая обычно используется для добавления аргументов компилятору. В этом случае это определяет макросы.
Так эти -DPACKET_LINK
эквивалент помещения #define PACKET_LINK 1
наверху всего.c и.h файлов в Вашем проекте. Скорее всего, у Вас есть код в Вашем проекте, который смотрит, если они макросы определяются, и делает что-то в зависимости от этого:
#ifdef PACKET_LINK
// This code will be ignored if PACKET_LINK is not defined
do_packet_link_stuff();
#endif
#ifdef LOW_POWER
// This code will be ignored if LOW_POWER is not defined
handle_powersaving_functions();
#endif
, Если Вы смотрите далее вниз в Вашем make-файле, необходимо видеть, что $(CFLAGS)
, вероятно, используется как:
$(CC) $(CFLAGS) ...some-more-arguments...
Где-нибудь в make-файле CFLAG будет использоваться в строке компиляции как это:
$(CC) $(CFLAGS) $(C_INCLUDES) $<
и в конечном счете в выполнении будет переведен в:
gcc -DPACKET_LINK -DLOW_POWER -c filename.c -o filename.o
Это определяет, будет передан исходному коду, как это было, определяют в заголовочном файле
-D обозначает , определяют (в gcc), по крайней мере, который позволяет Вам #define на командной строке вместо файла где-нибудь. Общей вещью видеть был бы-DDEBUG или-DNDEBUG, которые соответственно активируют или отключают отладку кода.
-D опция установила переменные препроцессора, таким образом, в Вашем случае, весь код, который находится в указанном "#ifdef / #endif" блоки, будет скомпилирован.
Т.е.
#ifdef PACKET_LINK
/* whatever code here */
#endif
CFLAGS является переменной, используемой в make-файле, который будет расширен до, он - содержание, когда компилятор вызывается.
, Например,
gcc $(CFLAGS) source.c
Только для полноты в этом - при использовании nmake утилиты Microsoft Вы не могли бы на самом деле видеть $ (CFLAGS) макрос, используемый в make-файле, потому что nmake имеет некоторые значения по умолчанию для вещей как компиляция файлов C/C++. Среди других следующее предопределено в nmake (я не уверен, делает ли GNU, делает что-либо как это), таким образом, Вы не могли бы видеть его в рабочем make-файле в Windows:
.c.exe:
commands: $(CC) $(CFLAGS) $<
.c.obj:
commands: $(CC) $(CFLAGS) /c $<
.cpp.exe:
commands: $(CXX) $(CXXFLAGS) $<
.cpp.obj:
commands: $(CXX) $(CXXFLAGS) /c $<
Я нашел, что Просят, чтобы г-н Make был большой ссылкой для подсказок по Make-файлу