常见的内存报错原因

69 篇文章 17 订阅

invalid next size (fast)

出错原因:内存地址越界

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char *p = malloc(4);
    char *x = malloc(4);

    for (int i = 0; i < 30; i++)
    {
        p[i] = 'a';
    }

    printf("%s\n", p);

    free(p);

    return 0;
}
$ gcc main.c 
$ ./a.out 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
*** Error in `./a.out': free(): invalid next size (fast): 0x0000000000d25010 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7fce801a17e5]
/lib/x86_64-linux-gnu/libc.so.6(+0x8037a)[0x7fce801aa37a]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x4c)[0x7fce801ae53c]
./a.out[0x40061c]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7fce8014a830]
./a.out[0x4004e9]
======= Memory map: ========
00400000-00401000 r-xp 00000000 08:01 6455206                            /home/liyongjun/project/my/c/0126/a.out
00600000-00601000 r--p 00000000 08:01 6455206                            /home/liyongjun/project/my/c/0126/a.out
00601000-00602000 rw-p 00001000 08:01 6455206                            /home/liyongjun/project/my/c/0126/a.out
00d25000-00d46000 rw-p 00000000 00:00 0                                  [heap]
7fce7bdea000-7fce7be00000 r-xp 00000000 08:01 3806157                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7fce7be00000-7fce7bfff000 ---p 00016000 08:01 3806157                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7fce7bfff000-7fce7c000000 rw-p 00015000 08:01 3806157                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7fce7c000000-7fce7c021000 rw-p 00000000 00:00 0 
7fce7c021000-7fce80000000 ---p 00000000 00:00 0 
7fce8012a000-7fce802ea000 r-xp 00000000 08:01 3812110                    /lib/x86_64-linux-gnu/libc-2.23.so
7fce802ea000-7fce804ea000 ---p 001c0000 08:01 3812110                    /lib/x86_64-linux-gnu/libc-2.23.so
7fce804ea000-7fce804ee000 r--p 001c0000 08:01 3812110                    /lib/x86_64-linux-gnu/libc-2.23.so
7fce804ee000-7fce804f0000 rw-p 001c4000 08:01 3812110                    /lib/x86_64-linux-gnu/libc-2.23.so
7fce804f0000-7fce804f4000 rw-p 00000000 00:00 0 
7fce804f4000-7fce8051a000 r-xp 00000000 08:01 3812091                    /lib/x86_64-linux-gnu/ld-2.23.so
7fce806ee000-7fce806f1000 rw-p 00000000 00:00 0 
7fce80718000-7fce80719000 rw-p 00000000 00:00 0 
7fce80719000-7fce8071a000 r--p 00025000 08:01 3812091                    /lib/x86_64-linux-gnu/ld-2.23.so
7fce8071a000-7fce8071b000 rw-p 00026000 08:01 3812091                    /lib/x86_64-linux-gnu/ld-2.23.so
7fce8071b000-7fce8071c000 rw-p 00000000 00:00 0 
7ffe8b88e000-7ffe8b8b0000 rw-p 00000000 00:00 0                          [stack]
7ffe8b8d4000-7ffe8b8d7000 r--p 00000000 00:00 0                          [vvar]
7ffe8b8d7000-7ffe8b8d9000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
已放弃 (核心已转储)

double free or corruption (fasttop)

出错原因:重复释放

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char *p = malloc(4);
    // char *x = malloc(4);

    for (int i = 0; i < 4; i++)
    {
        p[i] = 'a';
    }

    printf("%s\n", p);

    free(p);
    free(p);

    return 0;
}
$ gcc main.c 
$ ./a.out 
aaaa
*** Error in `./a.out': double free or corruption (fasttop): 0x0000000001439010 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7ff04d8187e5]
/lib/x86_64-linux-gnu/libc.so.6(+0x8037a)[0x7ff04d82137a]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x4c)[0x7ff04d82553c]
./a.out[0x40061a]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7ff04d7c1830]
./a.out[0x4004e9]
======= Memory map: ========
00400000-00401000 r-xp 00000000 08:01 6455206                            /home/liyongjun/project/my/c/0126/a.out
00600000-00601000 r--p 00000000 08:01 6455206                            /home/liyongjun/project/my/c/0126/a.out
00601000-00602000 rw-p 00001000 08:01 6455206                            /home/liyongjun/project/my/c/0126/a.out
01439000-0145a000 rw-p 00000000 00:00 0                                  [heap]
7ff048000000-7ff048021000 rw-p 00000000 00:00 0 
7ff048021000-7ff04c000000 ---p 00000000 00:00 0 
7ff04d58b000-7ff04d5a1000 r-xp 00000000 08:01 3806157                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7ff04d5a1000-7ff04d7a0000 ---p 00016000 08:01 3806157                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7ff04d7a0000-7ff04d7a1000 rw-p 00015000 08:01 3806157                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7ff04d7a1000-7ff04d961000 r-xp 00000000 08:01 3812110                    /lib/x86_64-linux-gnu/libc-2.23.so
7ff04d961000-7ff04db61000 ---p 001c0000 08:01 3812110                    /lib/x86_64-linux-gnu/libc-2.23.so
7ff04db61000-7ff04db65000 r--p 001c0000 08:01 3812110                    /lib/x86_64-linux-gnu/libc-2.23.so
7ff04db65000-7ff04db67000 rw-p 001c4000 08:01 3812110                    /lib/x86_64-linux-gnu/libc-2.23.so
7ff04db67000-7ff04db6b000 rw-p 00000000 00:00 0 
7ff04db6b000-7ff04db91000 r-xp 00000000 08:01 3812091                    /lib/x86_64-linux-gnu/ld-2.23.so
7ff04dd65000-7ff04dd68000 rw-p 00000000 00:00 0 
7ff04dd8f000-7ff04dd90000 rw-p 00000000 00:00 0 
7ff04dd90000-7ff04dd91000 r--p 00025000 08:01 3812091                    /lib/x86_64-linux-gnu/ld-2.23.so
7ff04dd91000-7ff04dd92000 rw-p 00026000 08:01 3812091                    /lib/x86_64-linux-gnu/ld-2.23.so
7ff04dd92000-7ff04dd93000 rw-p 00000000 00:00 0 
7fffc9a71000-7fffc9a93000 rw-p 00000000 00:00 0                          [stack]
7fffc9bab000-7fffc9bae000 r--p 00000000 00:00 0                          [vvar]
7fffc9bae000-7fffc9bb0000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
已放弃 (核心已转储)

free(): invalid pointer

出错原因:释放的地址不是 malloc 申请的

编译时有警告提醒

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char p[1];

    free(p);

    return 0;
}
$ gcc main.c 
main.c: In function ‘main’:
main.c:8:5: warning: attempt to free a non-heap object ‘p’ [-Wfree-nonheap-object]
     free(p);
     ^
$ ./a.out 
*** Error in `./a.out': free(): invalid pointer: 0x00007ffd28125e67 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7fd41e4e87e5]
/lib/x86_64-linux-gnu/libc.so.6(+0x8037a)[0x7fd41e4f137a]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x4c)[0x7fd41e4f553c]
./a.out[0x4005c0]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7fd41e491830]
./a.out[0x4004c9]
======= Memory map: ========
00400000-00401000 r-xp 00000000 08:01 6455206                            /home/liyongjun/project/my/c/0126/a.out
00600000-00601000 r--p 00000000 08:01 6455206                            /home/liyongjun/project/my/c/0126/a.out
00601000-00602000 rw-p 00001000 08:01 6455206                            /home/liyongjun/project/my/c/0126/a.out
7fd418000000-7fd418021000 rw-p 00000000 00:00 0 
7fd418021000-7fd41c000000 ---p 00000000 00:00 0 
7fd41e25b000-7fd41e271000 r-xp 00000000 08:01 3806157                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7fd41e271000-7fd41e470000 ---p 00016000 08:01 3806157                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7fd41e470000-7fd41e471000 rw-p 00015000 08:01 3806157                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7fd41e471000-7fd41e631000 r-xp 00000000 08:01 3812110                    /lib/x86_64-linux-gnu/libc-2.23.so
7fd41e631000-7fd41e831000 ---p 001c0000 08:01 3812110                    /lib/x86_64-linux-gnu/libc-2.23.so
7fd41e831000-7fd41e835000 r--p 001c0000 08:01 3812110                    /lib/x86_64-linux-gnu/libc-2.23.so
7fd41e835000-7fd41e837000 rw-p 001c4000 08:01 3812110                    /lib/x86_64-linux-gnu/libc-2.23.so
7fd41e837000-7fd41e83b000 rw-p 00000000 00:00 0 
7fd41e83b000-7fd41e861000 r-xp 00000000 08:01 3812091                    /lib/x86_64-linux-gnu/ld-2.23.so
7fd41ea35000-7fd41ea38000 rw-p 00000000 00:00 0 
7fd41ea5f000-7fd41ea60000 rw-p 00000000 00:00 0 
7fd41ea60000-7fd41ea61000 r--p 00025000 08:01 3812091                    /lib/x86_64-linux-gnu/ld-2.23.so
7fd41ea61000-7fd41ea62000 rw-p 00026000 08:01 3812091                    /lib/x86_64-linux-gnu/ld-2.23.so
7fd41ea62000-7fd41ea63000 rw-p 00000000 00:00 0 
7ffd28106000-7ffd28128000 rw-p 00000000 00:00 0                          [stack]
7ffd28197000-7ffd2819a000 r--p 00000000 00:00 0                          [vvar]
7ffd2819a000-7ffd2819c000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
已放弃 (核心已转储)

corrupted size vs. prev_size

待续

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
abb机器⼈过载报错_ABB机器⼈常见报警代码与解决⽅案 当ABB机器⼈在⽰教器上发出报警代码时,也会把产⽣的原因和解决的办法展⽰出来,对于有着丰富的ABB机器⼈操作经验员⼯来说,可以 很快提取到有效信息,并着⼿去处理问题。可是对于通常的ABB机器⼈操作员⼯来说,这些提⽰会太笼统,难以提取有效信息,更别提能⼀ 步⼀步的列出解决⽅案。所以⼴州长科⾃动化从易到难的列出⼀些常见的ABB机器⼈报警代码与解决⽅案,给⼤家提供⼀个参考,为各位争 取宝贵的时间。 1、报警代码:20032(转数计数器未更新) 报警原因:ABB机器⼈有个转数计数器,是⽤独⽴的电池供电,以记录各个轴的数据。如果⽰ABB教器提⽰电池电量过低,或者在断电情况 下ABB机器⼈⼿臂位置移动了,这时候需要对转数计数器进⾏更新,否则机器⼈运⾏位置是不准的。 20032解决⽅案处理步骤: ⼿动把ABB机器⼈各个轴停到机械原点,就是对齐各轴上的刻度线和对应的槽; 在主菜单⾥点击"校准"-->点击"更新转数计数器"; 依次点击更新各轴转数计数器(更新时,⽰教器不⽤Enable); 2、报警代码:38103(与SMB的通信中断) 38103解决⽅案:检查机器⼈控制柜下⽅的x2到机器⼈本体的SMB线是否接好。 3、报警代码:50057(关节未同步) 报警原因:此故障多数由于未正确关机导致。 50057解决⽅案:1、点击"重启",选择"⾼级",选择B启动,机器⼈将恢复到上⼀次正常状态。(正确关机⽅式不是直接断电,⽽是进 ⼊ABB,点击"重新启动",然后选"⾼级",再选择"关机") 4、报警代码:50204(动作监控)或者50056(关节碰撞) 报警原因:ABB机器⼈发⽣碰撞(图中提⽰ABB机器⼈1轴可能发⽣碰撞),或者电机抱闸未打开。 50204/50056解决⽅法:如果确实发⽣了碰撞,可以先临时关闭碰撞监控,缓慢移动ABB机器⼈,脱离碰撞状态; 如果未发⽣碰撞,则检查接触板附近的K42、K43、K44上的抱闸控制线是否接通。 (关闭碰撞监控的步骤:在控制⾯板中点击"监控",然后选择关闭⼿动操纵监控。) 5、报警代码:50296(SMB内存数据差异) 报警原因:更换了SMB或控制器卡,致使SMB内存数和控制柜数据不⼀致。 50296解决⽅案处理步骤: 1、在主菜单界⾯,选择需要校准的机械单元,点击"SMB内存"; 2、选择"⾼级"; 3、根据原因选择"清除控制柜内存"或"清除SMB内存"; 4、点击"关闭"返回后点击"更新…"; 5、根据原因选择"使⽤SMB内存数据更新控制柜"或"使⽤机柜数据更新SMB内存"; 6、重新更新转速计数器。 7、报警代码:34316(电机电流错误) 报警原因:驱动到对应电机的动⼒线未正确连接。 34316解决⽅法:根据⽰教器提⽰确认动⼒线连接错误的轴,然后调整动⼒线的连接。 (A41为驱动,X11为1轴输出,X12为2轴输出,以此类推) 8、报警代码:10106(维修时间提醒) 报警原因:ABB机器⼈智能周期保养维护提醒,⽤于提⽰⽤户对机器⼈进⾏必要的保养和检修。 10106解决⽅案步骤:完成对应的保养和检修后,要进⾏⼀个操作将保养与检修提⽰的计时复位,操作如下: 在住菜单中点击"程序编辑器"-->调试-->调⽤例⾏程序… 点击"ServiceInfo"-->转到; 按住使能开关,然后按运⾏按键; 选择对应要复位的计时对象,1是定期保养时间,2是操作时间,3是齿轮箱保养时间。这⾥选择1。 选"RESET",进⾏复位并且确认; 点击 "Exit" 退出-->点击"yes"; 你可以看到"Elapsed time"被复位为0了; 在程序编辑器中点击"PP移⾄MAIN"选项。 报警提⽰10107、10108、10109、10110、10111、10112也是与ABB机器⼈维修相关,解决步骤跟10106相似。 9、报警代码:39504(制动器电源过载) 39504解决⽅案:对驱动单元、制动电源、动⼒电缆、控制模块、本体线缆、编码器线缆进⾏排查,找出损坏的部件进⾏更换。 ⼴州长科⾃动化拥有熟练的维修团队,⾃备⼤量ABB机器⼈易损配件,能在短时间内解决各种故障,帮助⽤户快速恢复⽣产设备。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Li-Yongjun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值