最近在6670上运行程序,发现程序总是跑飞,单步调试发现程序在执行时,前后的参数发生了变化,比如这个
for(k = core0_eq_symbol; k < core1_eq_symbol;k++)
{
prb_demapping_pdsch((signed int*)che_interp_data[0],
NUM_MAX_ANTENNA,
vxx_cell_para.cellID,
k,
slot_idx >> 1,
slot_idx,
(signed int*)vxx_fft_lay_buffer.prbdemapping_freq_che[0][0][k – core0_eq_symbol],
(signed int*)vxx_fft_lay_buffer.prbdemapping_freq_che[0][1][k – core0_eq_symbol]
);
prb_demapping_pdsch((signed int*)che_interp_data[1],
NUM_MAX_ANTENNA,
vxx_cell_para.cellID,
k,
slot_idx >> 1,
slot_idx,
(signed int*)vxx_fft_lay_buffer.prbdemapping_freq_che[1][0][k – core0_eq_symbol],
(signed int*)vxx_fft_lay_buffer.prbdemapping_freq_che[1][1][k – core0_eq_symbol]
);
}
这段代码中k是作为一个循环的参数传递给里面的两个子函数的,但是当子函数1运行结束时,子函数2中的k值突变为一个随机数,导致程序出错。
我怀疑是不是cmd分配的问题,有没有遇到过类似情况的大神帮忙分析一下。子 函数中是没有对k进行赋值的哈
Allen35065:
看看你的子函数是不是对k进行了修改,或者有没有发生内存越界,进去单步调试一下即可
chen chen6:
回复 Allen35065:
您好!感谢您的回复~
我的子函数没有对k进行修改,所以才会头疼这个问题;我再详细描述一下,就是上面的代码,两个子函数的形参里面都有k这个变量,我在进入子函数1之前,看看k
的值,比如说是3,位置假设是0x00803500,我一旦进入子函数1之后呢,再查看k的值,发现k的地址已经变到了其他地址了,0x00803512,值也变成了0x20,这些地址和数值的准确值我记不清了,但是过程就是这样的,导致子函数1里边k的值已经变化了,但是子函数1中间并没有对其改变的语句;子函数2使用k时,自然出错。另外,您说的内存越界,请问如何查看呢~