我有一个相当复杂的代码,它在 AIX 上运行良好,但在 Solaris 中进行核心转储。我试图使其尽可能简化。
下面是一个具有指向函数的指针的全局结构
custom_struct_1 my_struct1 = {
intValue1, intValue2, intValue3, func3
};
这是第二个结构,具有指向第一个的指针作为字段
custom_struct_2 my_struct2 = {
intValue1, intValue2, &my_struct1
};
下面是流程
func1(){
custom_struct *my_dumping_struct;
memset(my_struct, 0, sizeof(my_struct);
func2(my_dumping_struct, &my_struct2);
}
func2(custom_struct *my_dumping_struct, custom_struct_2 *my_struct2 ){
custom_struct1 *my_cust1;
// Some conditions go here
my_cust1 = &my_struct2->custom_struct_1;
my_cust1->struct_func(my_dumping_struct);
}
func3(custom_struct *my_dumping_struct)
{
// Here when trying to access any field of the passed structure
// a core dump is occuring
if(my_dumping_struct->intValue1 == 0)
{
....
}
}
我很感激任何帮助。这让我快疯了。我尝试了很多东西,比如首先定义没有指针的转储结构,使用
memset(&my_dumping_structre, 0, sizeof(my_dumping_struct))
并通过对它仍然核心转储的其他函数的引用传递它。
编辑
结构定义如下:
struct custom_struct {
int intValue1;
int intValue2;
};
struct custom_struct_1 {
int intValue1;
int intValue2;
int intValue3;
int (*struct_func)(custom_struct *my_struct);
};
struct custom_struct_2 {
int intValue1;
int intValue2;
struct custom_struct_1 *my_struct;
};
谢谢