首页 > 解决方案 > APP CRASH-致命信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR)

问题描述

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

  

标签: androidmemory-managementcrashadbmemcpy

解决方案


推荐阅读