问题叙述:
在x86平台下无论Debug还是Release都没问题,而在arm平台下Debug版本程序无问题,Release版本程序(-O3编译)发现输出值不正确,怀疑值被篡改,于是在调用前后分别使用printf
打印出参数值,结果发现即使是Release版本程序也无问题。
简直是薛定谔的猫
再现,BUG变成量子问题了??我这是在量子编程????
问题检查过程:
起初怀疑各种变量是不是没有初始化,查了大半天发现也没啥问题,也不可能是内存越界问题,如果是越界,程序早就甭了。
而且还是Release版本,断电都没法打,这可咋整????
后来想起来valgrid
,尝试着测试了下:valgrind --vgdb=yes ./main
,结果报错510个,,,根据提示,发现某.c文件第563行代码处报Conditional jump or move depends on uninitialised value(s)
。
查找前文发现,变量C在从3x1向量提取数据时索引值写错,导致引用了一个未初始化的值,最终产生了薛定谔的猫
的问题,再次编译,发现问题解决。
参考链接:
- https://mp.weixin.qq.com/s/RltWF_CYHtyOQjXAsBpHRQ