我有一个使用动态数组和指针处理字符串的函数。该函数将对字符串进行一些操作,其指针作为参数提供,然后它将返回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]
答案 0 :(得分:3)
我评论了其他部分,结果相同
您问题中的程序没有错误(参数应该被称为mystring
,而不是mystr
,并且它有内存泄漏)。
无论您遇到什么“无效指针”问题,都是在省略问题的部分。