我正在编写一个可以在 Ubuntu 和 Windows 上运行的小型振荡运动程序。完成程序的一部分(主要部分)后,我尝试在 Windows 上对其进行测试,工作正常(使用 Pelles C)然后,我将我的数据复制到 Ubunutu 计算机上,在虚拟机(VMware Workstation)上运行。我使用 GCC 对其进行了很好的编译,并因“分段错误(核心转储)”错误而崩溃。崩溃前的输出:
Simulation Starting...
Creating Containers.....
Done!
Initializing Containers.....
Initializing Container
Done!...
Initializing Container
Done!...
Initializing Container
Segmentation fault (core dumped)
--------------------------------
zDA.c 的一部分,用于在仿真中使用之前初始化向量所需的函数
int InitializeArray (DATA *item) {
printf("\nInitializing Container");
item->num_allocated = 0;
item->num_elements = 0;
item->the_array = NULL;
printf("\nDone!...");
if (!item->the_array) {
return -1;
}
return 0;
}
调用函数时,来自 zSim.c 的片段
int Simulate(SIMOPT so,PRINTOPT po) {
printf("\nSimulation Starting...\nCreating Containers...");
//Create Data Objects
//vectors
DATA Theta,Omega,T;
DATA *pTheta = Θ
DATA *pOmega = Ω
DATA *pT = &T;
//Initial Values
int method = so.method;
float g = so.g;
float l = so.l;
float itheta = so.theta;
float iomega = so.omega;
float dt = so.dt;
float df = so.df;
float dw = so.dw;
float q = so.q;
float maxtime = so.maxtime;
//backend variables
float i = 0; //Simulation Counter
int k=0; //Counter to Count array size;
int kmax = 0;
float th,thi,om,omi,t,ti; //Simulation variables
int gt,go,pl,mat;
printf("..");
printf("\nDone!\nInitializing Containers...");
printf("..");
//Initialize Containers
InitializeArray(pTheta);
InitializeArray(pOmega);
InitializeArray(pT); //**FOR SOME REASON, it stops working here -_-
printf("DONE! NIT"); //It worked fine on windows, there are no dependencies.
th = pTheta->the_array[0];
om = pOmega->the_array[0];
t = pT->the_array[0];
我不明白为什么它在 Windows 上工作,在 ubuntu 上没有,Pelles 上的编译器为我修复了一些东西,或者我的虚拟机快疯了,我的意思是......它已经初始化了 3 个数组中的 2 个,这是什么第三个错了:)”?