Linux下realloc()函数内存分配问题

#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
char c,*p;
p = (char *)malloc(10);
for(i=0;;i++)
{
c = getchar();
if(i>9)
p = (char *)realloc(p,1);
if(c == '\n')
{
p[i]='\0';
break;
}
else
p[i]=c;
}
printf("%s\n",p);
free(p);
return 0;
}
一个内存分配问题,程序接受终端的输入然后重新输出,当输入超过10个字节时,使用realloc()自动重新分配,问题出来了,当输入的字串长度小于14时,均能正常输出,大于等于14则报错,报错信息如下:
[root@localhost realloc]# ./realloc
1111111111111
1111111111111
[root@localhost realloc]# ./realloc
11111111111111
*** glibc detected *** ./realloc: realloc(): invalid next size: 0x09423008 ***
======= Backtrace: =========
/lib/libc.so.6[0x813e31]
/lib/libc.so.6[0x8190d1]
/lib/libc.so.6(realloc+0xdc)[0x81926c]
./realloc[0x80484c9]
/lib/libc.so.6(__libc_start_main+0xe6)[0x7b9d26]
./realloc[0x80483f1]
======= Memory map: ========
00374000-00375000 r-xp 00000000 00:00 0 [vdso]
00709000-00726000 r-xp 00000000 08:03 2491426 /lib/libgcc_s-4.4.7-20120601.so.1
00726000-00727000 rw-p 0001d000 08:03 2491426 /lib/libgcc_s-4.4.7-20120601.so.1
00781000-0079f000 r-xp 00000000 08:03 2491452 /lib/ld-2.12.so
0079f000-007a0000 r--p 0001d000 08:03 2491452 /lib/ld-2.12.so
007a0000-007a1000 rw-p 0001e000 08:03 2491452 /lib/ld-2.12.so
007a3000-00934000 r-xp 00000000 08:03 2491453 /lib/libc-2.12.so
00934000-00936000 r--p 00191000 08:03 2491453 /lib/libc-2.12.so
00936000-00937000 rw-p 00193000 08:03 2491453 /lib/libc-2.12.so
00937000-0093a000 rw-p 00000000 00:00 0
08048000-08049000 r-xp 00000000 08:03 4068969 /home/realloc/realloc
08049000-0804a000 rw-p 00000000 08:03 4068969 /home/realloc/realloc
09423000-09444000 rw-p 00000000 00:00 0 [heap]
b782b000-b782c000 rw-p 00000000 00:00 0
b783a000-b783d000 rw-p 00000000 00:00 0
bfcea000-bfcff000 rw-p 00000000 00:00 0 [stack]

内存鞋漏了,有可能是你relloc失败,但是你没有判断,
返回NULL:当需要扩展的大小(第二个参数)为0并且第一个参数不为NULL时。此时原内存变成“free(游离)”的了。
返回NULL:当没有足够的空间可供扩展的时候。此时,原内存空间的大小维持不变。追问

但是为什么输入字串长度是10-13的时候,它都能正常输出,到14就报错了?

追答

这个应该是内存不够了,恰好就能relloc几次

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网