- 1
- 2
- 3
- 4
- 5
- 6
- 7
temp = (NODE *)malloc(sizeof(NODE));
if (temp == NULL)
{
Free(temp);
Free(task);
return NULL;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+129
temp = (NODE *)malloc(sizeof(NODE));
if (temp == NULL)
{
Free(temp);
Free(task);
return NULL;
}
Курсовик ночью по пьяни. Подстраховался блин.
PS: ОП ХУЙю
И что ты — не ТарасБ.
Блять, запутался.
это - стадия отрицания собственного тарасизма, часто проявляется в виде крайней тарасофобии.
и никаких лишних ссылок на имена типов.
Такое использование sizeof не встречал и на лекциях не обьяснялось. На первый взгляд выглядит дико, особенно в ситуациях temp == NULL
То, что оно вам "выглядит дико" - плохо. Вышеприведенный вариант - хорошо известная, общепринятая и повсеместно использующаяся идиома. Очень жаль, что вас на лекциях вместо этого учат таким вещам, как приведение типа результата 'malloc' и тупое засорение кода программы именами типов.
(Приведение результата 'malloc' - это уже, кстати, со всех сторон разобранная классика говнокодирования. Казалось, что каждый пионер знает, что нельзя приводить результат 'malloc'. А нет...)
Насчет warning level 4 - недоумеваю. Приведение 'void *' к любому объектному указательному типу - фундаментальная фича языка C и любой компилятор, который на это осмелится выдавать варнинг, будет тут же высмеян с рынка под фанфары. Догадываясь, что речь идет о VS, попробовал выставить в VS2010 warning level 4. Никаких варнингов не получил. Как же вы там умудряетесь на это варнинги получать?
NODE *temp = malloc(sizeof(NODE));
на
что то новое *temp = malloc(sizeof(что то новое));
что на
что то новое *temp = malloc(sizeof(*temp));
все равно придется все эти места просматривать если не юзать что то типа
typedef sometype1 NODE;
typedef sometype2 NODE;
если так то тогда похрен имя типа или нет там написано
переопределил и забил
и потом возникающих с идиотскими вопросами типа "почему мой код падает, я ведь все правильно делаю".
Когда им объясняют, что "звездочка не нужна" и должно быть 'sizeof(double)', они начинают петь песни о том, что вот это
у них "всегда работало и сейчас работает, несмотря на лишнюю звездочку" (и т.п.)
Вот если бы им втолковывали сразу, что все вызовы 'malloc' должны выглядеть так
и никаких множественных звездочек и имен типов - тогда и шлака этого было бы на порядки меньше.
Ибо так приходится лезть и смотреть какого типа переменная.
А то что ноют пионеры - это их проблемы. Мы же под блондинок стандарты не подгоняем.
Зачем/куда/кому лезть?
malloc(sizeof(id) + sizeof(name)+ sizeof(date) + sizeof(temp));
malloc(sizeof(int) + sizeof(char *) + sizeof(timestamp) + sizeof(long));
Пример - работа с сетью генерация разных макак.
По всем остальным критериям на качество кода - не влияет. В принципе, допустим любой вариант.
А поменять тип (не переименовать) - проектировать систему надо нормально.
Типы используются только в декларациях. Исполняемый же код (читай: алгоритмы) должен реализовываться настолько типонезависимым образом, насколько это возможно. Вот это надо было бы втолковать вашему "учителю"... Хотя, конечно, надежды мало.
double *p = malloc(n * sizeof(double));
Я безнадёжен?
Тогда уж и каст надо было оставить - для пущей очевидности
Другой вопрос - чем явное указание типа в sizeof хуже, чем неявное? При условии, что код уже написан и типы переменных меняться не будут.
double *p = (double *)0, (double *) malloc(n * sizeof(double));
Может я чего-то не понимаю, но не должно ли это вызвать "double free or corruption" ?
Блин представил себя программой. Приходит SIGSEGV и говорит. "double free or corruption".))
Какого типа guest?
пхп РУЛИТТТ