大宇私人领地伊甸园丨宁愿做了后悔,也不要错过后悔[www.mrdayu.com]
注册

24小时联系邮箱:[email protected]

所有文章
大宇私人伊甸园: 首页 > 所有文章 > 编程人生 > C/C++语言 > realloc(): invalid pointer


友情链接:


realloc(): invalid pointer

发布时间:2018/11/22 C/C++语言 标签invalid pointerrealloc()阅读:37

遇到问题:

*** Error in `./a.out': realloc(): invalid pointer: 0x0000000000400700 ***
======= Backtrace: =========
/lib64/libc.so.6(+0x7ada4)[0x7ff463e6fda4]
/lib64/libc.so.6(+0x81709)[0x7ff463e76709]
./a.out[0x40061e]
/lib64/libc.so.6(__libc_start_main+0xf5)[0x7ff463e16b35]
./a.out[0x400509]
======= Memory map: ========
00400000-00401000 r-xp 00000000 08:03 18458928                           /home/dayu/LearnNote/STDC/a.out
00600000-00601000 r--p 00000000 08:03 18458928                           /home/dayu/LearnNote/STDC/a.out
00601000-00602000 rw-p 00001000 08:03 18458928                           /home/dayu/LearnNote/STDC/a.out
0075c000-0077d000 rw-p 00000000 00:00 0                                  [heap]
7ff45c000000-7ff45c021000 rw-p 00000000 00:00 0 
7ff45c021000-7ff460000000 ---p 00000000 00:00 0 
7ff463bdf000-7ff463bf4000 r-xp 00000000 08:03 84                         /usr/lib64/libgcc_s-4.8.5-20150702.so.1
7ff463bf4000-7ff463df3000 ---p 00015000 08:03 84                         /usr/lib64/libgcc_s-4.8.5-20150702.so.1
7ff463df3000-7ff463df4000 r--p 00014000 08:03 84                         /usr/lib64/libgcc_s-4.8.5-20150702.so.1
7ff463df4000-7ff463df5000 rw-p 00015000 08:03 84                         /usr/lib64/libgcc_s-4.8.5-20150702.so.1
7ff463df5000-7ff463fab000 r-xp 00000000 08:03 68465                      /usr/lib64/libc-2.17.so
7ff463fab000-7ff4641ab000 ---p 001b6000 08:03 68465                      /usr/lib64/libc-2.17.so
7ff4641ab000-7ff4641af000 r--p 001b6000 08:03 68465                      /usr/lib64/libc-2.17.so
7ff4641af000-7ff4641b1000 rw-p 001ba000 08:03 68465                      /usr/lib64/libc-2.17.so
7ff4641b1000-7ff4641b6000 rw-p 00000000 00:00 0 
7ff4641b6000-7ff4641d6000 r-xp 00000000 08:03 68458                      /usr/lib64/ld-2.17.so
7ff4643be000-7ff4643c1000 rw-p 00000000 00:00 0 
7ff4643d2000-7ff4643d5000 rw-p 00000000 00:00 0 
7ff4643d5000-7ff4643d6000 r--p 0001f000 08:03 68458                      /usr/lib64/ld-2.17.so
7ff4643d6000-7ff4643d7000 rw-p 00020000 08:03 68458                      /usr/lib64/ld-2.17.so
7ff4643d7000-7ff4643d8000 rw-p 00000000 00:00 0 
7fffb9e97000-7fffb9eb8000 rw-p 00000000 00:00 0                          [stack]
7fffb9f1a000-7fffb9f1c000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
Aborted (core dumped)

错误原因:

realloc()第一个参数需要提供来自malloc创建出来的内存地址。

可是每次我们malloc创建地址后,有的人喜欢使用p=”helloword”。

这是初学者最经常犯的错误。

我们来分析一下下面一个语句:

char *p=(char *)malloc(100);
p="helloword";

p接住malloc从堆上分配的100个字节的内存。

紧接着p又指向了一个静态区的10个字节的”helloword”

实际上p将malloc创建的堆上的内存抛弃掉了,并且还没有释放掉。

创建出来不用,还造成内存泄漏。

转眼指向一个静态区的内存。

紧接着:

char *temp=realloc(p,1000);

就回出现标题的错误。

内存位于栈区或者静态区。讲这样的p传给realloc就会发生realloc invalid pointer错误。

具体的就是realloc函数要求src为下面两种情况:

1.src==NULL

2.src指针必须是malloc(), calloc(), 或realloc()分配的

解决办法:

使用memcpy()函数将“helloword”传入p中。

The bottom line, for me, is simple.

Let’s hope it doesn’t take 500 years for a discipline of testing to becomes the standard for software developers.

From:dayu

您好!请登录

合作网站快捷登录:
点击取消回复

已有0评论

    大宇博客

    点击这里给我发消息 点击这里给我发消息 点击这里给我发消息 点击这里给我发消息