打印
[其他]

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

[复制链接]
1128|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#每日话题#

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


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

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

double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size){
    int sum = nums1Size + nums2Size;
    int* nums12 = (int*)malloc(sum);
    if (!nums12) {
        printf("malloc error\n");
        return -0.1;
    }
    double result = 0.0;
    memset(nums12,0,sum);
    printf("nums1Size=%d nums2Size=%d num12[0]=%d\n",nums1Size,nums2Size,nums12[0]);
    memcpy(nums12,nums1,nums1Size);
    merge(nums12,nums1Size,nums2,nums2Size);

    if (sum % 2 == 0) {
        result = (nums12[sum/2 -1] + nums12[sum/2]) / 2;
    } else {
        result = (nums12[sum/2] / 2);
    }

    free(nums12);

    return result;
}
错误在下面:
*** Error in `/data/study/ttt': free(): invalid next size (fast): 0x0000000000602010 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x777f5)[0x7ffff7a847f5]
/lib/x86_64-linux-gnu/libc.so.6(+0x8038a)[0x7ffff7a8d38a]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x4c)[0x7ffff7a9158c]
/data/study/ttt[0x4009b9]
/data/study/ttt[0x400a37]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7ffff7a2d840]
/data/study/ttt[0x400649]
======= Memory map: ========
00400000-00401000 r-xp 00000000 fd:11 4718834                            /data/study/ttt
00600000-00601000 r--p 00000000 fd:11 4718834                            /data/study/ttt
00601000-00602000 rw-p 00001000 fd:11 4718834                            /data/study/ttt
00602000-00623000 rw-p 00000000 00:00 0                                  [heap]
7ffff0000000-7ffff0021000 rw-p 00000000 00:00 0
7ffff0021000-7ffff4000000 ---p 00000000 00:00 0
7ffff75f3000-7ffff7609000 r-xp 00000000 fd:01 410135                     /lib/x86_64-linux-gnu/libgcc_s.so.1
7ffff7609000-7ffff7808000 ---p 00016000 fd:01 410135                     /lib/x86_64-linux-gnu/libgcc_s.so.1
7ffff7808000-7ffff7809000 rw-p 00015000 fd:01 410135                     /lib/x86_64-linux-gnu/libgcc_s.so.1
7ffff7809000-7ffff780c000 r-xp 00000000 fd:01 412308                     /lib/x86_64-linux-gnu/libdl-2.23.so
7ffff780c000-7ffff7a0b000 ---p 00003000 fd:01 412308                     /lib/x86_64-linux-gnu/libdl-2.23.so
7ffff7a0b000-7ffff7a0c000 r--p 00002000 fd:01 412308                     /lib/x86_64-linux-gnu/libdl-2.23.so
7ffff7a0c000-7ffff7a0d000 rw-p 00003000 fd:01 412308                     /lib/x86_64-linux-gnu/libdl-2.23.so
7ffff7a0d000-7ffff7bcd000 r-xp 00000000 fd:01 412545                     /lib/x86_64-linux-gnu/libc-2.23.so
7ffff7bcd000-7ffff7dcd000 ---p 001c0000 fd:01 412545                     /lib/x86_64-linux-gnu/libc-2.23.so
7ffff7dcd000-7ffff7dd1000 r--p 001c0000 fd:01 412545                     /lib/x86_64-linux-gnu/libc-2.23.so
7ffff7dd1000-7ffff7dd3000 rw-p 001c4000 fd:01 412545                     /lib/x86_64-linux-gnu/libc-2.23.so
7ffff7dd3000-7ffff7dd7000 rw-p 00000000 00:00 0
7ffff7dd7000-7ffff7dfd000 r-xp 00000000 fd:01 412537                     /lib/x86_64-linux-gnu/ld-2.23.so
7ffff7edd000-7ffff7edf000 rw-p 00000000 00:00 0
7ffff7eed000-7ffff7eee000 rw-p 00000000 00:00 0
7ffff7eee000-7ffff7ef1000 r-xp 00000000 fd:01 410062                     /lib/x86_64-linux-gnu/libonion_security.so.1.0.19
7ffff7ef1000-7ffff7ff1000 ---p 00003000 fd:01 410062                     /lib/x86_64-linux-gnu/libonion_security.so.1.0.19
7ffff7ff1000-7ffff7ff2000 rw-p 00003000 fd:01 410062                     /lib/x86_64-linux-gnu/libonion_security.so.1.0.19
7ffff7ff2000-7ffff7ff6000 rw-p 00000000 00:00 0
7ffff7ff6000-7ffff7ffa000 r--p 00000000 00:00 0                          [vvar]
7ffff7ffa000-7ffff7ffc000 r-xp 00000000 00:00 0                          [vdso]
7ffff7ffc000-7ffff7ffd000 r--p 00025000 fd:01 412537                     /lib/x86_64-linux-gnu/ld-2.23.so
7ffff7ffd000-7ffff7ffe000 rw-p 00026000 fd:01 412537                     /lib/x86_64-linux-gnu/ld-2.23.so
7ffff7ffe000-7ffff7fff000 rw-p 00000000 00:00 0
7ffffffde000-7ffffffff000 rw-p 00000000 00:00 0                          [stack]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]

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

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

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

修改成

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

下面也需要对应修改

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

    /*当m = 0的时候*/
    while (n >= 0) {
        pnums1[p--] = pnums2[n--];
    }
}

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

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


使用特权

评论回复
评论
hobbye501 2023-5-25 09:11 回复TA
确实出现过很多BUG... 
王栋春 2023-5-24 11:39 回复TA
这期话题有些高大上的感觉呀! 

相关帖子

沙发
王栋春| | 2023-5-24 11:40 | 只看该作者
很少编程尤其是单片机的程序,不过在编辑PLC程序时犯过非常幼稚的错误——LD X18

使用特权

评论回复
板凳
地瓜patch| | 2023-5-24 11:40 | 只看该作者
针对外设的控制,加个Delay会解决很多问题。

使用特权

评论回复
地板
forgot| | 2023-5-24 11:52 | 只看该作者
写过最愚蠢的代码是用了很多malloc结果到处忘记free,结果搞了一堆问题查不出来

使用特权

评论回复
5
qiangtech| | 2023-5-24 11:55 | 只看该作者
算不上愚蠢吧,这种错误不是常规的吗?常见的拼写错误,逻辑错误,要是翻出一两年前写的,简直是不忍直视。

使用特权

评论回复
6
EPTmachine| | 2023-5-25 06:12 | 只看该作者
我写了两个头文件,分别定义了两个结构体,然后两个头文件交叉包含,两个结构体中有一个对方的变量,编译的时候就会报错。

使用特权

评论回复
7
laocuo1142| | 2023-5-25 08:33 | 只看该作者
哈哈,犯错都是有的

使用特权

评论回复
8
木野臻| | 2023-5-25 08:57 | 只看该作者
大学时代码一条一条的敲,敲得太快少这个漏那个,总之排查老费劲了

使用特权

评论回复
9
hobbye501| | 2023-5-25 09:13 | 只看该作者
我记得做过一个设定更新时间  忘记做越界处理了。。。结果生产设定的时候 超范围了 出现了随机的情况

使用特权

评论回复
10
wzx1994| | 2023-5-25 09:19 | 只看该作者
有的时候出现越奇葩的问题,往往都是犯了一个最简单的错误。。。

使用特权

评论回复
11
gaon2| | 2023-5-25 10:09 | 只看该作者
犯错是正常的

使用特权

评论回复
12
ROSHEN_007| | 2023-5-25 11:58 | 只看该作者
I写成 1

使用特权

评论回复
13
cooldog123pp| | 2023-5-27 09:21 | 只看该作者
我自己写的蠢代码就不提了,最经典的是一个工作了10年的研究生,C语言10的6次方,他是这么写的10^6,这个bug我们查了2天,绝对是个人才。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

2177

主题

7814

帖子

250

粉丝