当我的应用程序崩溃时,执行了一些memcpy()时, 这是调用堆栈
08-14 16:01:11.209 F/DEBUG (20611): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xffffffff7428d7f8
08-14 16:01:11.259 F/DEBUG (20611): backtrace:
08-14 16:01:11.259 F/DEBUG (20611): #00 pc 000000000001c7e4 /system/lib64/libc.so (memcpy+116)
08-14 16:01:11.259 F/DEBUG (20611): #01 pc 0000000000532278 (strdup+76)
08-14 16:01:11.259 F/DEBUG (20611): #02 pc 0000000000496fec
由于我使用公共池在strdup()中为源和目标分配了内存,并且strdup()的循环数小于n。我怀疑是否发生了内存重叠。您能否提供一些解决此崩溃的解决方案。 (因为崩溃是随机观察到的。)
示例:其中string是具有char * ptr和int len成员的结构。
char* strdup(pool *pool,string *d,const string *s)
{
if (d == s)
return dst;
if (s->len)
{
d->ptr = (char*)pool_alloc(pool, s->len);
memcpy(d->ptr, s->ptr, s->len);
}
d->len = s->len;
return d;
}