[其他] 【每日话题】你写过最愚蠢的代码是…

[复制链接]
1886|14
 楼主| 21小跑堂 发表于 2023-5-24 10:54 | 显示全部楼层 |阅读模式
#每日话题#

“今天把最近写的一些代码,拿出来给大伙看看,毕竟丢的是我的脸
第一个,是帮忙一个朋友看的力扣题目,然后就自己写了下。
题目如下:https://leetcode.cn/problems/median-of-two-sorted-arrays/

52286646d79c1c1e33.png
代码写成这样:
  1. void merge(int* nums1, int m, int* nums2, int n){
  2.     int p = m-- + n-- -1;
  3.     printf("1,p=%d m=%d n=%d\n",p,m,n);
  4.     while (m >= 0 && n >= 0) {
  5.         nums1[p--] = nums1[m] > nums2[n] ? nums1[m--] : nums2[n--];
  6.     }

  7.     /*当m = 0的时候*/
  8.     while (n >= 0) {
  9.         printf("3,p=%d m=%d n=%d\n",p,m,n);
  10.         nums1[p--] = nums2[n--];
  11.     }
  12. }

  13. double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size){
  14.     int sum = nums1Size + nums2Size;
  15.     int* nums12 = (int*)malloc(sum);
  16.     if (!nums12) {
  17.         printf("malloc error\n");
  18.         return -0.1;
  19.     }
  20.     double result = 0.0;
  21.     memset(nums12,0,sum);
  22.     printf("nums1Size=%d nums2Size=%d num12[0]=%d\n",nums1Size,nums2Size,nums12[0]);
  23.     memcpy(nums12,nums1,nums1Size);
  24.     merge(nums12,nums1Size,nums2,nums2Size);

  25.     if (sum % 2 == 0) {
  26.         result = (nums12[sum/2 -1] + nums12[sum/2]) / 2;
  27.     } else {
  28.         result = (nums12[sum/2] / 2);
  29.     }

  30.     free(nums12);

  31.     return result;
  32. }
错误在下面:
  1. *** Error in `/data/study/ttt': free(): invalid next size (fast): 0x0000000000602010 ***
  2. ======= Backtrace: =========
  3. /lib/x86_64-linux-gnu/libc.so.6(+0x777f5)[0x7ffff7a847f5]
  4. /lib/x86_64-linux-gnu/libc.so.6(+0x8038a)[0x7ffff7a8d38a]
  5. /lib/x86_64-linux-gnu/libc.so.6(cfree+0x4c)[0x7ffff7a9158c]
  6. /data/study/ttt[0x4009b9]
  7. /data/study/ttt[0x400a37]
  8. /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7ffff7a2d840]
  9. /data/study/ttt[0x400649]
  10. ======= Memory map: ========
  11. 00400000-00401000 r-xp 00000000 fd:11 4718834                            /data/study/ttt
  12. 00600000-00601000 r--p 00000000 fd:11 4718834                            /data/study/ttt
  13. 00601000-00602000 rw-p 00001000 fd:11 4718834                            /data/study/ttt
  14. 00602000-00623000 rw-p 00000000 00:00 0                                  [heap]
  15. 7ffff0000000-7ffff0021000 rw-p 00000000 00:00 0
  16. 7ffff0021000-7ffff4000000 ---p 00000000 00:00 0
  17. 7ffff75f3000-7ffff7609000 r-xp 00000000 fd:01 410135                     /lib/x86_64-linux-gnu/libgcc_s.so.1
  18. 7ffff7609000-7ffff7808000 ---p 00016000 fd:01 410135                     /lib/x86_64-linux-gnu/libgcc_s.so.1
  19. 7ffff7808000-7ffff7809000 rw-p 00015000 fd:01 410135                     /lib/x86_64-linux-gnu/libgcc_s.so.1
  20. 7ffff7809000-7ffff780c000 r-xp 00000000 fd:01 412308                     /lib/x86_64-linux-gnu/libdl-2.23.so
  21. 7ffff780c000-7ffff7a0b000 ---p 00003000 fd:01 412308                     /lib/x86_64-linux-gnu/libdl-2.23.so
  22. 7ffff7a0b000-7ffff7a0c000 r--p 00002000 fd:01 412308                     /lib/x86_64-linux-gnu/libdl-2.23.so
  23. 7ffff7a0c000-7ffff7a0d000 rw-p 00003000 fd:01 412308                     /lib/x86_64-linux-gnu/libdl-2.23.so
  24. 7ffff7a0d000-7ffff7bcd000 r-xp 00000000 fd:01 412545                     /lib/x86_64-linux-gnu/libc-2.23.so
  25. 7ffff7bcd000-7ffff7dcd000 ---p 001c0000 fd:01 412545                     /lib/x86_64-linux-gnu/libc-2.23.so
  26. 7ffff7dcd000-7ffff7dd1000 r--p 001c0000 fd:01 412545                     /lib/x86_64-linux-gnu/libc-2.23.so
  27. 7ffff7dd1000-7ffff7dd3000 rw-p 001c4000 fd:01 412545                     /lib/x86_64-linux-gnu/libc-2.23.so
  28. 7ffff7dd3000-7ffff7dd7000 rw-p 00000000 00:00 0
  29. 7ffff7dd7000-7ffff7dfd000 r-xp 00000000 fd:01 412537                     /lib/x86_64-linux-gnu/ld-2.23.so
  30. 7ffff7edd000-7ffff7edf000 rw-p 00000000 00:00 0
  31. 7ffff7eed000-7ffff7eee000 rw-p 00000000 00:00 0
  32. 7ffff7eee000-7ffff7ef1000 r-xp 00000000 fd:01 410062                     /lib/x86_64-linux-gnu/libonion_security.so.1.0.19
  33. 7ffff7ef1000-7ffff7ff1000 ---p 00003000 fd:01 410062                     /lib/x86_64-linux-gnu/libonion_security.so.1.0.19
  34. 7ffff7ff1000-7ffff7ff2000 rw-p 00003000 fd:01 410062                     /lib/x86_64-linux-gnu/libonion_security.so.1.0.19
  35. 7ffff7ff2000-7ffff7ff6000 rw-p 00000000 00:00 0
  36. 7ffff7ff6000-7ffff7ffa000 r--p 00000000 00:00 0                          [vvar]
  37. 7ffff7ffa000-7ffff7ffc000 r-xp 00000000 00:00 0                          [vdso]
  38. 7ffff7ffc000-7ffff7ffd000 r--p 00025000 fd:01 412537                     /lib/x86_64-linux-gnu/ld-2.23.so
  39. 7ffff7ffd000-7ffff7ffe000 rw-p 00026000 fd:01 412537                     /lib/x86_64-linux-gnu/ld-2.23.so
  40. 7ffff7ffe000-7ffff7fff000 rw-p 00000000 00:00 0
  41. 7ffffffde000-7ffffffff000 rw-p 00000000 00:00 0                          [stack]
  42. ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]

  43. Program received signal SIGABRT, Aborted.
  44. 0x00007ffff7a42438 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54
  45. 54      ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
这个硬是在周末查了好久……

申请内存的时候太过于想当然了:
  1. 上面的代码,需要把

  2. int* nums12 = (int*)malloc(sum);

  3. 修改成

  4. int* nums12 = (int*)malloc(sum*sizeof(int));

  5. 下面也需要对应修改

  6. memset(nums12,0,sum);
  7. memcpy(nums12,nums1,nums1Size);
正确的代码如下:
  1. void merge(int* pnums1, int m, int* pnums2, int n){
  2.     int p = m-- + n-- -1;
  3.     while (m >= 0 && n >= 0) {
  4.         pnums1[p--] = pnums1[m] > pnums2[n] ? pnums1[m--] : pnums2[n--];
  5.     }

  6.     /*当m = 0的时候*/
  7.     while (n >= 0) {
  8.         pnums1[p--] = pnums2[n--];
  9.     }
  10. }

  11. double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size){
  12.     int sum = nums1Size + nums2Size;
  13.     int* nums12 = (int*)malloc(sum*sizeof(int));
  14.     double result = 0.0;
  15.     memset(nums12,0,sum);
  16.     memcpy(nums12,nums1,nums1Size*sizeof(int));
  17.     merge(nums12,nums1Size,nums2,nums2Size);
  18.     if (sum % 2 == 0)
  19.         result = (double)(nums12[sum/2 -1] + nums12[sum/2]) / 2;
  20.     else
  21.         result = (nums12[sum/2]);
  22.     free(nums12);
  23.     return result;
  24. }
以上是作者写的为自认挺愚蠢的代码。
请大家分享:你写过愚蠢的代码吗?写过最愚蠢的代码又是什么呢?(cr:嵌入式Linux ,写代码的篮球球痴)

话题奖励如下:
1、所有参与回帖的用户,均可获得10家园币(家园币可以兑换礼品);
2、抽两位幸运的友友各送出500家园币。


评论

确实出现过很多BUG...  发表于 2023-5-25 09:11
这期话题有些高大上的感觉呀!  发表于 2023-5-24 11:39
王栋春 发表于 2023-5-24 11:40 | 显示全部楼层
很少编程尤其是单片机的程序,不过在编辑PLC程序时犯过非常幼稚的错误——LD X18
地瓜patch 发表于 2023-5-24 11:40 | 显示全部楼层
针对外设的控制,加个Delay会解决很多问题。
forgot 发表于 2023-5-24 11:52 | 显示全部楼层
写过最愚蠢的代码是用了很多malloc结果到处忘记free,结果搞了一堆问题查不出来
qiangtech 发表于 2023-5-24 11:55 | 显示全部楼层
算不上愚蠢吧,这种错误不是常规的吗?常见的拼写错误,逻辑错误,要是翻出一两年前写的,简直是不忍直视。
EPTmachine 发表于 2023-5-25 06:12 | 显示全部楼层
我写了两个头文件,分别定义了两个结构体,然后两个头文件交叉包含,两个结构体中有一个对方的变量,编译的时候就会报错。
laocuo1142 发表于 2023-5-25 08:33 | 显示全部楼层
哈哈,犯错都是有的
木野臻 发表于 2023-5-25 08:57 | 显示全部楼层
大学时代码一条一条的敲,敲得太快少这个漏那个,总之排查老费劲了
hobbye501 发表于 2023-5-25 09:13 | 显示全部楼层
我记得做过一个设定更新时间  忘记做越界处理了。。。结果生产设定的时候 超范围了 出现了随机的情况
wzx1994 发表于 2023-5-25 09:19 | 显示全部楼层
有的时候出现越奇葩的问题,往往都是犯了一个最简单的错误。。。
gaon2 发表于 2023-5-25 10:09 | 显示全部楼层
犯错是正常的
ROSHEN_007 发表于 2023-5-25 11:58 | 显示全部楼层
I写成 1
cooldog123pp 发表于 2023-5-27 09:21 | 显示全部楼层
我自己写的蠢代码就不提了,最经典的是一个工作了10年的研究生,C语言10的6次方,他是这么写的10^6,这个bug我们查了2天,绝对是个人才。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:21ic管理
简介:哎呦,这里是二姨家跑跑跑小跑堂,微信联系:xiaopaotang21ic

2299

主题

8314

帖子

293

粉丝
快速回复 在线客服 返回列表 返回顶部