APP崩溃-致命信号11(SIGSEGV),代码1(SEGV_MAPERR)

时间:2020-09-01 15:40:08

标签: android memory-management crash adb memcpy

当我的应用程序崩溃时,执行了一些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;
}

  

0 个答案:

没有答案