Няшная / Говнокод #6720 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
temp = (NODE *)malloc(sizeof(NODE));
      if (temp == NULL)
      {
        Free(temp);
        Free(task);
        return NULL;
      }

Курсовик ночью по пьяни. Подстраховался блин.

Запостил: Enelar Enelar, (Updated )

Комментарии (68) RSS

      • А почему ты так относишься к php? Как язык он очень даже ничего. Дело вообще не в php, а в некоторых людях, которые говнокодят программируют на нём.
        Ответить
  • Тут одна первая строчка уже за версту попахивает: ненужное приведение типа, плюс совершенно не оправданное использование типа под 'sizeof'. В разы осмысленнее было бы
    temp  =  malloc(sizeof *temp)


    и никаких лишних ссылок на имена типов.
    Ответить
    • Что вы говорите. А вы warning level 4 поставьте, и сразу станет нужным.
      Такое использование sizeof не встречал и на лекциях не обьяснялось. На первый взгляд выглядит дико, особенно в ситуациях temp == NULL
      Ответить
      • Аргумент 'sizeof' не вычисляется, поэтому чему изначально равно 'temp' никакой роли не играет.

        То, что оно вам "выглядит дико" - плохо. Вышеприведенный вариант - хорошо известная, общепринятая и повсеместно использующаяся идиома. Очень жаль, что вас на лекциях вместо этого учат таким вещам, как приведение типа результата 'malloc' и тупое засорение кода программы именами типов.

        (Приведение результата 'malloc' - это уже, кстати, со всех сторон разобранная классика говнокодирования. Казалось, что каждый пионер знает, что нельзя приводить результат 'malloc'. А нет...)

        Насчет warning level 4 - недоумеваю. Приведение 'void *' к любому объектному указательному типу - фундаментальная фича языка C и любой компилятор, который на это осмелится выдавать варнинг, будет тут же высмеян с рынка под фанфары. Догадываясь, что речь идет о VS, попробовал выставить в VS2010 warning level 4. Никаких варнингов не получил. Как же вы там умудряетесь на это варнинги получать?
        Ответить
        • Точно, моя вина. Дело в том что уже 2 года пишу на спп(или пытаюсь?), а программы принимают только на си.
          Ответить
    • не велика потеря что так лазить править
      NODE *temp = malloc(sizeof(NODE));
      на
      что то новое *temp = malloc(sizeof(что то новое));
      что на
      что то новое *temp = malloc(sizeof(*temp));
      все равно придется все эти места просматривать если не юзать что то типа
      typedef sometype1 NODE;
      typedef sometype2 NODE;
      если так то тогда похрен имя типа или нет там написано
      переопределил и забил
      Ответить
      • А почему вообще не рекомендуется использовать маллок так как я делаю?
        Ответить
      • Дело не в том, что может поднадобиться "лазить править", а в том, что весь инет забит нытьем от пионеров, делающих какое-нибудь
        double *p = (double *) malloc(n * sizeof(double *));

        и потом возникающих с идиотскими вопросами типа "почему мой код падает, я ведь все правильно делаю".

        Когда им объясняют, что "звездочка не нужна" и должно быть 'sizeof(double)', они начинают петь песни о том, что вот это
        double **pp = (double **) malloc(n * sizeof(double **));

        у них "всегда работало и сейчас работает, несмотря на лишнюю звездочку" (и т.п.)

        Вот если бы им втолковывали сразу, что все вызовы 'malloc' должны выглядеть так
        p = malloc(n * sizeof *p);

        и никаких множественных звездочек и имен типов - тогда и шлака этого было бы на порядки меньше.
        Ответить
        • Сегодня спросил у учителя, он сказал что использовате sizeof от типа в malloc оправданно, а использовать переменную дерьмокод.
          Ибо так приходится лезть и смотреть какого типа переменная.

          А то что ноют пионеры - это их проблемы. Мы же под блондинок стандарты не подгоняем.
          Ответить
          • >Ибо так приходится лезть и смотреть какого типа переменная.
            Зачем/куда/кому лезть?
            Ответить
            • сравните
              malloc(sizeof(id) + sizeof(name)+ sizeof(date) + sizeof(temp));
              malloc(sizeof(int) + sizeof(char *) + sizeof(timestamp) + sizeof(long));
              Пример - работа с сетью генерация разных макак.
              Ответить
              • Муть какая-то... Это в каком же контексте может понадобиться такая сумма? "Работа с сетью генерация разных макак" - это не объяснение.
                Ответить
                • когда не умеют объявлять и паковать структуры, например
                  Ответить
                • честно - не знаю. трудно сходу придумать пример где лучше типы юзать.
                  Ответить
          • Да, если написать тип, обычно получается информативнее.
            По всем остальным критериям на качество кода - не влияет. В принципе, допустим любой вариант.
            А поменять тип (не переименовать) - проектировать систему надо нормально.
            Ответить
            • правильнее брать sizeof от переменной, а не повторяться дважды с sizeof(type)
              Ответить
          • Что-то ваш учитель несет какой-то ярко выраженный бред сивой кобылы. Все с точностью до наоборот: именно в варианте с 'sizeof(type)' надо лезть и смотреть, какого типа данные мы аллоцируем. Да еще и звездочки тщательно подстчитывать, если их там несколько. А вот вариант c 'sizeof *pointer' - типонезависим, т.е. некуда лезть не надо и ничего смотреть не надо. И этот принцип - максимальная типонезависимость - это один из фундаментальных принципов написания качественного кода.

            Типы используются только в декларациях. Исполняемый же код (читай: алгоритмы) должен реализовываться настолько типонезависимым образом, насколько это возможно. Вот это надо было бы втолковать вашему "учителю"... Хотя, конечно, надежды мало.
            Ответить
        • Я бы написал так, потому что это наиболее очевидно:

          double *p = malloc(n * sizeof(double));

          Я безнадёжен?
          Ответить
          • Да, безнадежен.

            Тогда уж и каст надо было оставить - для пущей очевидности
            double *p = (double *) (double *) (double *) (double *) malloc(n * sizeof(double)); /* allocating an array of `double` */
            Ответить
            • Каст здесь явно не нужен, так что мимо.

              Другой вопрос - чем явное указание типа в sizeof хуже, чем неявное? При условии, что код уже написан и типы переменных меняться не будут.
              Ответить
            • оптимизировать вас не учили?
              double *p = (double *)0, (double *) malloc(n * sizeof(double));
              Ответить
  • if (temp == NULL)
    {
      Free(temp);

    Может я чего-то не понимаю, но не должно ли это вызвать "double free or corruption" ?
    Ответить
    • Вообще, стандартный free(NULL) совершенно корректен и просто ничего не делает.
      Ответить
      • Да, а к тому же это Free, т.е моя функция.

        Блин представил себя программой. Приходит SIGSEGV и говорит. "double free or corruption".))
        Ответить
  • Будет, круто, если у NODE есть конструктор
    Ответить
    • да вобще ничего лучше ПХП не придумали! вот я на пхп даже хакерские проги пишу с лохов ломаю
      Ответить
      • А я люблю обмазываться несвежим пхп и дрочить.
        Ответить
  • с"X?Y,B!C:R!S?H.DM)S!O,O H:Z$T"WX(L(T"L(Y(I(K:N!L$J Q(TH$K$A)NP)W)L)E)J(F(E!V$G"M"L(C.L"F$E"K(Z$H.L:H.C.U?H,VF!Q H,T)G G!E?E O:U.E.L$Z:C!W G,Q.SW?T"E R?W O$M)K J:M!E?V?Q:A"U L:N HI:L$F(O(W?G:P.F)B)L)Q?O(P(E(V!V$Z.F:X O"RW)I:BD$V:V!C"J?P(MU F G!Z!I:I!B$G,J!G$D!M:T(X:F(Q)Y)U.K U$U:O J?S(Q?T(C:R,K,J!G T?RRF$D:P:L.S,U X!N?U I)D G$F:MP?X S,E!V,J.N"J,P)V$N,J)R"I)N$M?A$H:W.Q(H!W:M"S W:W)V)A?J?F"L R:A$G)E$A O(I)E,C:Y.R"R$E:K)X:Q(D D!T:K J)M.M)M,H$T C H.S M"U(H,S)Q)W,Y)O,J"O V,Z,Q?RJ?H.Z?J:J.D:R.X(A!P$C)V(R?I?V,K$A:M,P?D.U A J"Y:B,V,J!W?T"S$E!H$Q(ER M.A,V,W.W?Z,O(M(A$B:Y K$W.J O)S$T$V,I,N!W:Y,M(L:CP$R)F(H?Y"M,E,D$X?L"J)N:L!UQI)Q D!B"I R:X:M,K W?N"G,J(Z)X$D(E(E"G)X?L)M)G"J.F?B?V:H!M)D:D!M)Z,Q"H L C:O(M!L!I"M!R(C"B!X,L Y"YR O?A:P"C.Z.X.M!B?L.X"T!N,V$W$I?B,D R)W H:GE Z"T$V$R)M A(W Q"L)J"WJ$U.D:R.O?R$L?N(C,K XP?W(W:W:F?I"U:M"VE.P,O,O,K?A"U,K:B?G.O.B(V C Y?R"ZB,N"F,H(S!R"S$C W DP.Y.U!Q,K:Y.O,U?M)B"P)G)T)N:D(Z"M)Q)Y)W"W"K:Q.S,BC B?WJ!J"Y$H L.A.N?R:ST)R$L)P?N.HO T$Y)L,D,H)C!Z(Z.F!Z:E$U"T"C,UH:G:I(J$E.U.Q,W,P$L$L.V:I$H)R(U:U:I,Y"A?Y K)Q.WF.FM,A?W)J O"I?A.V?G,F.M?C"V(O.F"A?P?JE?W A$MA:X,B(Y?L,L?O.AI?E$Z!Y$Y!CX)J$Z$V.X"T,L"C!X)V!I,Z L W E(L.J$Q!W.I$S G,QR.Q,B:G.F"A!V?MI,N)S.P$N:Y!R M:T,V,O,F.L.G.IR,G,Q(S?R"Y:WA$US)F,Y)XЗKCYJQRHKLQXCDVYILAZXIUDGLJTVOVEUMIIRIRUQDDURSQZZMRVWXHGKVIFJMZYSUEQLMBMCENEJJKIEUFUOLCEIIQTCMUBJVGZWEHIOWEMVHCCAFAXUMUOGSKJBBOZXWRSSLWEUDNAMVYITHJUDMZJPNQFVZIZYXGGVNZACFYYGZBJOUFQEKZRMDNUXSEJIGV
    Ответить
  • у C?Z.L,D!N:H N$XZ$X$WJ$E)I"N:P!H$Z?C:DU(M?V(N.W!V(U:E!V"E(E$A!V?C:W)D)DE!U!A:N(Y(G.GB.A,UJ,X)I(NN A,E O:Q.Y,X.FE$E.Z X?M)P)V.F:Z!J?M?C:Q!B(V?L)I M?B(F(A$H?K$L?J:U?F,S,U)Q,E:J$P.Y$Q$W$MI"J,N:D$R$D:R$P?ZF!V)H?U$M F)N:X JR.W YH,R?X,OQ P:I?D)H!I$P E$J:D,J.K!Y!J!JN(S(B:SP$G$M.I(Z:A?C"E?R,L?L)H$A(U.QE!H?X:Z"G.D"Q!I$P,J R)S!V D$M$W$D:S"U$G,J:YH:F(L U!Y(E XO(C:DH(V$Z,U(P FG,E A"H)K.A.TRS(Y"O(T?E,L$E)R:E X PN)Y?O?A:GK"M!U?Y)G,S)NR.ZT"RX,OS:P!F.S"U)F)J V$Z"UZ:U"NM,R:X:Y XD"T$U,K!E:J)N:Z)H?U$I)T)S?ZH I"A,X N.F,IF:U)XL?U:M"Y"S)Q"C,N?T.QV(Q.E$T?O!D.Y!M.W"S:V,F,D!LR$H:B.J,X$F.S,O(C,K?K A"O:Z"X$L"E?JR.Z$X$G!O$J:I!U,Z C F$Z T,Q?Y$Y,H$A!E$X:QI"V)C"Y.V"K(E"CD.G,X O:G"BO,G?F!L"D U$M,Q(K:PO)C.B)UD?S?D)G$L:Z"B(Z)F L.P:O!W(Q.O?Z(E,G!I)J:J R$I!E K P$V,R$Z?F!EM.T.K:X:P S$J?G)N$P:E$K:A"Z(ZYV"P IP!H?WN!Z(X)P H,H)Q(A?X?T(C(T KC(J!T!L M S)M:Z JS.Q,D)W$N.Z:V.A.T:C I?P)X!L)S$R,Q(M,N?YHC)Z$S.A)H?ZA"M:Q:Y:Y"E(W?X"H(VY,K)E$I:C:N,G:Y"J$AG)L.P(M$A.T)Y(Q$Z)P!D?U.B:U.M,C$LQ J,R!J I.O"A!Q$E)Z"Z.T K G.G?W.D!S.C"Z:JМYJMZJXYLSPZODAEBKCBKFIEHOBLSPKLJPDJGXSQPJSKAQRMXAWNIOQYELVPIVRJLKYFLAHRUHPOINMSRJHXCKYSNCQBQTZALYRIBZGCJOCNDHIUGKMHGBCCEYVLLDNPIUPNRTYQSQKLHKNJTHPTCFPGFWUGEBXMBPUCAYJVJQGFBQOEOKVGXXGOJYKFFPYEVRVTXTEGMYCWYBXZQRRUNSCUNZXXACYJLVQKQIETTDTEEESCOHITOXMOIMTVGLVYRUBIYUTJJPUYENFRMTNHSLMUVZZKTNGBIS
    Ответить
  • еZ(Z)M)N.A:E$X"C.G N?C)J)V)X$B)T.J,P(H)XЙSJIFPFVSYOMWKUADAT
    Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8