LINUX.ORG.RU

История изменений

Исправление PPP328, (текущая версия) :

Дядь, вы передаете в функцию const char **, который внутри sscanf разыменовывается в char const *, а затем модифицируется.

  1. Это должен быть void **
  2. Дядь, этот аргумент не просто так void **. Передайте туда long int * например:
#include <stdio.h>
#include <stdlib.h>

int atk_memfile_from_specresid( const char *residual,
                                void **bufpp,
                                size_t *szp )
{
    int result = sscanf(residual, "<%p|%zu>", bufpp, szp);
    if( result == EOF )
    {
        return 0;
    }
    if( result )
    {
        return 1;
    }
    return 0;
}

int main()
{
    const char * res = "<0x7fb2a00010a0|1779>";
    long int pp = 0;
    size_t size;
    
    int fres = 0;
    fres = atk_memfile_from_specresid(res, (void **)&pp, &size);
    
    
    
    printf("%s %p %d\n", res, (void *)pp, fres);
    
    return 0;
}

Исходная версия PPP328, :

Дядь, вы передаете в функцию const char **, который внутри sscanf разыменовывается в char const *, а затем модифицируется.

  1. Это должен быть void **
  2. Const char * модифицируется. Const char. Я удивлен, что оно у вас вообще каждый раз в SEGFAULT не улетает.