Что курил автор цитаты ниже? http://citforum.ru/programming/c_unix/index.shtml Хрестоматия по программированию на Си в Unix, Андрей Богатырев Цитата: 3.5. Почему может завершаться по защите памяти следующая программа? #include <sys/types.h> #include <stdio.h> time_t t; extern time_t time(); ... t = time(0); /* узнать текущее время в секундах с 1 Янв. 1970 г.*/ Ответ: дело в том, что прототип системного вызова time() это: time_t time( time_t *t ); то есть аргумент должен быть указателем. Мы же вместо указателя написали в качестве аргумента 0 (типа int). На машине IBM PC AT 286 указатель - это 2 слова, а целое одно. Недостающее слово будет взято из стека произвольно. В результате time() получает в качестве аргумента не нулевой указатель, а мусор. Правильно будет написать: t = time(NULL); либо (по определению time()) time( &t ); а еще более корректно так: t = time((time_t *)NULL); Мораль: везде, где требуется нулевой указатель, следует писать NULL (или явное приведение нуля к типу указателя), а не просто 0.
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от hbee
Ответ на:
комментарий
от hbee
Ответ на:
комментарий
от Legioner
Ответ на:
комментарий
от Begemoth
Ответ на:
комментарий
от Legioner
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум хочу узнать текущй год, а gcc не дает (2007)
- Форум передача списка процессов сервера клиенту (2015)
- Форум null vs. NULL (2018)
- Форум NULL, true и 0 в C и C++ (2008)
- Форум java.lang.ExceptionInInitializerError: null (2020)
- Форум /dev/null (2008)
- Форум null lor :) (2006)
- Форум strlen(NULL); (2003)
- Форум null connection (2000)
- Форум Null-Modem (2004)