已解决!
主要原因是我这个 : Kalman kalman_init(q_0, r_0)子函数的返回值是一个结构体,该结构定义了好几个非常大的矩阵(15x15维的),所以占用的内存挺大的,当把该结构体定义为全局变量并且作为输入参数同时返回值为void类型时,问题得到的解决!
解决的方法是我把这个代码现在Visual studio2013上测试,发现进入这个子函数时,实参可以传递给形参,但是单步执行时,就跳出以下错误
百度查找原因可能是:在分配较大空间的临时变量的时候系统会插入chkstk函数来检测是否超过堆栈上已经分配的空间IDA pro反汇编识图
所以怀疑可能是返回值的原因,也可能是在子函数内部建立的Kalman类型的局部变量占用的内存太大,于是两种都测试了一下,发现是返回值的问题,问题解决!!
综上:子函数的返回值为较大的结构体时,可能会涉及到占用内存空间太大导致堆栈不足的问题!
以上个人见解,希望看到的大侠指正!!
已解决!
主要原因是我这个 : Kalman kalman_init(q_0, r_0)子函数的返回值是一个结构体,该结构定义了好几个非常大的矩阵(15x15维的),所以占用的内存挺大的,当把该结构体定义为全局变量并且作为输入参数同时返回值为void类型时,问题得到的解决!
解决的方法是我把这个代码现在Visual studio2013上测试,发现进入这个子函数时,实参可以传递给形参,但是单步执行时,就跳出以下错误
百度查找原因可能是:在分配较大空间的临时变量的时候系统会插入chkstk函数来检测是否超过堆栈上已经分配的空间IDA pro反汇编识图
所以怀疑可能是返回值的原因,也可能是在子函数内部建立的Kalman类型的局部变量占用的内存太大,于是两种都测试了一下,发现是返回值的问题,问题解决!!
综上:子函数的返回值为较大的结构体时,可能会涉及到占用内存空间太大导致堆栈不足的问题!
以上个人见解,希望看到的大侠指正!!
举报