Два упомянутых уважаемых человека говорят примерно об одних и тех же эффектах, но по-разному. Возьмем пример из той самой книжки Линдена, где он описывает, как делать не надо:
char * localized_time(char * filename)
{
struct tm *tm_ptr;
struct stat stat_block;
char buffer[120];
/* get the sourcefile's timestamp in time_t format */
stat(filename, &stat_block);
/* convert UNIX time_t into a struct tm holding local time */
tm_ptr = localtime(&stat_block.st_mtime);
/* convert the tm struct into a string in local format */
strftime(buffer, sizeof(buffer), "%a %b %e %T %Y", tm_ptr);
return buffer;
}
И Линден, и croco заставляют нас обратить внимание, что в предпоследней строке buffer, хотя вроде как является именем массива, приводит к тому, что в регистр eax помещается всего лишь указатель на некий фрагмент памяти, а этот фрагмент после возврата из функции имеет неопределенное содержание и вообще может не существовать.
no subject
И Линден, и croco заставляют нас обратить внимание, что в предпоследней строке buffer, хотя вроде как является именем массива, приводит к тому, что в регистр eax помещается всего лишь указатель на некий фрагмент памяти, а этот фрагмент после возврата из функции имеет неопределенное содержание и вообще может не существовать.