Программирование / память / логическая проблема в коде - PullRequest
0 голосов
/ 18 июля 2010

Можете ли вы сказать мне, что в коде что-то не так, мое приложение случайно падает, я не могу найти любую возможную логическую ошибку или ошибку памяти, пожалуйста, помогите, поскольку это выходит за рамки моей компетенции.

#define __FN__ "CGD9_gd_ParseAddFieldsProC"
int CGD9_gd_ParseAddFieldsProC (CGD_gd_ParseAddFields_Iparam_t *i_param_st_p)
{

   t_gd9adfld_t *p_ext_fields_s = NULL;
   t_gd9sbdat_t *p_buff =
                  ( t_gd9sbdat_t * )( i_param_st_p->i_add_fields_st );

   Trace(__FN__);

   DEBUG_GD_1("\n\n Function %s - started. \n\n", __FN__);

   if(*(i_param_st_p->o_add_fields) == NULL) {
     ERR_Report_1(DGD_ERR_IN_FUNCTION,
     __FN__ "ERROR - program will crash, input extended struct\
has not been initialized!");

     ERR_Report_1(DGD_ERR_IN_FUNCTION, __FN__\
"Check that exit point CMI9_auxc_A_GUIDING_init_forProc \
is used in GD table!");

    fflush(NULL);
    return FAILURE;
   }

   p_ext_fields_s = *(i_param_st_p->o_add_fields);

   memset ( p_ext_fields_s, ' ', sizeof (t_gd9adfld_t));

/* Copy all extended fields from GD tables to buffer one by one*/

        memcpy(&p_ext_fields_s->rowid,
          &p_buff[i_param_st_p->output_index].rowid,
          sizeof(p_buff[i_param_st_p->output_index].rowid));

    memset(p_ext_fields_s->rowid,'0',18);


        memcpy(&p_ext_fields_s->l9_legacy_prod_type,
          &p_buff[i_param_st_p->output_index].l9_legacy_prod_type,
          sizeof(p_ext_fields_s->l9_legacy_prod_type));


   /* Free the memory allocated for extended fields */

   free(i_param_st_p -> i_add_fields_st);
   i_param_st_p -> i_add_fields_st = NULL;

   DEBUG_GD_1("\n\n Function %s - completed successuflly. \n\n", __FN__);

   return SUCCESS;
}

Ответы [ 3 ]

3 голосов
/ 18 июля 2010

Выстрел в темноте:

Вы используете

memcpy(&p_ext_fields_s->rowid ...

, но

memset(p_ext_fields_s->rowid, ...

Так что, возможно, этодолжно быть

memset(&p_ext_fields_s->rowid,

вместо?Но если бы это действительно было проблемой, я ожидал бы, что это не будет случайным сбоем, а сбоит каждый раз ...

0 голосов
/ 19 июля 2010

Сбой кода для свободного выделения памяти:

free(i_param_st_p -> i_add_fields_st); 

Что не так в tht: <? </p>

0 голосов
/ 18 июля 2010

Почему вы используете sizeof () в первом случае, а затем постоянный размер ( 18 ) во втором?

memcpy(&p_ext_fields_s->rowid,
  &p_buff[i_param_st_p->output_index].rowid,
  sizeof(p_buff[i_param_st_p->output_index].rowid));

memset(p_ext_fields_s->rowid,'0',18);

PS Я бы предложил запустить ваш код с помощью инструмента проверки памяти (поскольку я подозреваю, что повреждения памяти).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...