코드에 문제가 있거나 응용 프로그램이 무작위로 충돌 함을 알 수 있습니까? 가능한 논리 또는 메모리 오류를 찾을 수 없습니다. . 어둠 속에서코드에서의 프로그래밍/메모리/논리 문제
#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;
}
대부분의 컴파일러는 함수 이름이있는 매크로 (보통 __FUNCTION__ 또는 가까운 매크로)를 미리 정의합니다. 그것은 적어도 당신 스스로 그것을하는 것을 막을 것입니다. –
디버거가 충돌하는 라인을 알려주고, 백 트레이스를 통해 그 상태에 어떻게 도달했는지 찾아야합니다. 지금까지 뭐 했니? –
종료 지점은 상위 레이어에 작성되었으며 거기에서 나는 아래 레이어에서 내 자신의 코드를 생성하는 데 사용했습니다. 의 pstack : ffffffff6e908e84 CGD9_gd_ParseAddFieldsProC "목표 - C"에 (ffffffff427eecd8, 0, 1144963b0, 10e318c90, 1144963b0, ffffffff427ef098) + 13C – Kimi