【发布时间】:2010-07-18 17:48:58
【问题描述】:
你能告诉我代码有什么问题吗,我的应用程序随机崩溃 我找不到任何可能的逻辑或内存错误,请帮忙,因为这超出了我的范围。
#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 (ffffffff427eecd8, 0, 1144963b0, 10e318c90, 1144963b0, ffffffff427ef098) + 13c
-
“objective-c”上的错误标签 - 这是直接的 C 世界和内存管理。
标签: c++ c memory-leaks memory-management