我在C中写一个轨道传播器,所有计算都正常工作但到达终点时突然意外中止。
[1] 67117 abort
我尝试使用Valgrind(我只知道在Mac上是实验性的)来发现我的错误,它输出的最终错误如下:
==67127== Process terminating with default action of signal 4 (SIGILL)
==67127== Illegal opcode at address 0x1A6BDA
==67127== at 0x1A6BDA: __abort (in /usr/lib/system/libsystem_c.dylib)
==67127== by 0x1A746C: __stack_chk_fail (in /usr/lib/system/libsystem_c.dylib)
==67127== by 0x1000019FD: main (call.c:188)
[1] 67127 illegal hardware instruction
call.c是一个脚本,其中有我的main函数,其第188行是final} all本身如下:
return 0;
}
我之前在matlab中编写了相同的程序并且它完美地工作但是将其转换为CI必须使用指针,这可能是我的错误的原因但是Valgrind的报告并没有这样说:
==67256== LEAK SUMMARY:
==67256== definitely lost: 0 bytes in 0 blocks
==67256== indirectly lost: 0 bytes in 0 blocks
==67256== possibly lost: 0 bytes in 0 blocks
然而,它声称我有10个mio错误"使用单位价值" (我使用Xcode检查并针对那些Xcode指出进行了更正。)
==67256== ERROR SUMMARY: 10000000 errors from 185 contexts
但是大多数要么指向标准库,要么指向将在其他角色初始化的其他函数中初始化的值(使用指针)。这可能是导致此错误的原因吗?由于传播工作正常直到它到达终点(我可以使用printf打印终端中每个时间步的值)并且最终中止我不这么认为。
当我使用Xcode运行它时,它永远不会停止运行,并且永远不会在每个时间步骤使用不同的值写入我要求的文件。 (但是,当我使用Valgrind时)。
我通常不会使用Xcode,但我想我会这一次,是否有任何编译器设置可以帮助我发现错误或者是否有人知道我可能做错了什么?
编辑: 我只想在主函数中添加最后的指令,如下所示。一切正常,然后我循环到达以下:
while ((tsince < stopmfe) && (satrec.error == 0))
其中一切正常(根据使用Valgrind打印的文件)直到它到达结尾, 然后我只有如下fclose说明:
fclose (outfilee);
fclose (infile);
fclose (outfile);
return 0;
}