在C中重新分配字符串会导致错误

时间:2013-01-20 02:33:43

标签: c linux string gcc realloc

我有一个使用动态数组和指针处理字符串的函数。该函数将对字符串进行一些操作,其指针作为参数提供,然后它将返回1;但是当我尝试重新分配以扩展字符串时,我遇到了错误。我确定这不是关于我在代码中做的其他事情,因为我评论了其他部分并且结果相同。我在我的电脑上使用gcc 4.7.2和ArchLinux。

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

int process_my_str(char **mystr)
{
    *mystring=malloc(sizeof(char));
    *mystring[0]=(char)0;
    //Do other work
    *mystring=realloc(*mystring, 100*sizeof(char)); 
    // I need more memory but When I compile and run this application exits with 
    // a stack trace
    return 1;

}

int main(int argc, char **argv)
{
   char *string_will_be_filled=NULL;
   process_my_str(&string_will_be_filled);
   printf(string_will_be_filled);
   return 0;
}

错误:

*** Error in `/home/ongun/Code/workshop/strtest': realloc(): invalid pointer: 0x00007fffffffe2b8 ***
======= Backtrace: =========
/usr/lib/libc.so.6(+0x7ab06)[0x7ffff7aa8b06]
/usr/lib/libc.so.6(realloc+0x28e)[0x7ffff7aac84e]
/home/ongun/Code/workshop/strtest[0x4006cd]
/home/ongun/Code/workshop/strtest[0x400770]
/usr/lib/libc.so.6(__libc_start_main+0xf5)[0x7ffff7a4fa15]
/home/ongun/Code/workshop/strtest[0x4005a9]
======= Memory map: ========
00400000-00401000 r-xp 00000000 08:05 8789315                            /home/ongun/Code/workshop/strtest
00600000-00601000 rw-p 00000000 08:05 8789315                            /home/ongun/Code/workshop/strtest
00601000-00622000 rw-p 00000000 00:00 0                                  [heap]
7ffff7819000-7ffff782e000 r-xp 00000000 08:05 8653526                    /usr/lib/libgcc_s.so.1
7ffff782e000-7ffff7a2d000 ---p 00015000 08:05 8653526                    /usr/lib/libgcc_s.so.1
7ffff7a2d000-7ffff7a2e000 rw-p 00014000 08:05 8653526                    /usr/lib/libgcc_s.so.1
7ffff7a2e000-7ffff7bd2000 r-xp 00000000 08:05 8653142                    /usr/lib/libc-2.17.so
7ffff7bd2000-7ffff7dd1000 ---p 001a4000 08:05 8653142                    /usr/lib/libc-2.17.so
7ffff7dd1000-7ffff7dd5000 r--p 001a3000 08:05 8653142                    /usr/lib/libc-2.17.so
7ffff7dd5000-7ffff7dd7000 rw-p 001a7000 08:05 8653142                    /usr/lib/libc-2.17.so
7ffff7dd7000-7ffff7ddb000 rw-p 00000000 00:00 0 
7ffff7ddb000-7ffff7dfc000 r-xp 00000000 08:05 8653149                    /usr/lib/ld-2.17.so
7ffff7fbd000-7ffff7fc0000 rw-p 00000000 00:00 0 
7ffff7ff9000-7ffff7ffb000 rw-p 00000000 00:00 0 
7ffff7ffb000-7ffff7ffc000 r-xp 00000000 00:00 0                          [vdso]
7ffff7ffc000-7ffff7ffd000 r--p 00021000 08:05 8653149                    /usr/lib/ld-2.17.so
7ffff7ffd000-7ffff7ffe000 rw-p 00022000 08:05 8653149                    /usr/lib/ld-2.17.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]

1 个答案:

答案 0 :(得分:3)

  

我评论了其他部分,结果相同

您问题中的程序没有错误(参数应该被称为mystring,而不是mystr,并且它有内存泄漏)。

无论您遇到什么“无效指针”问题,都是在省略问题的部分。