-1

我正在编写一个可以在 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 个,这是什么第三个错了:)”?

4

1 回答 1

2

初始化看起来不会崩溃。但是紧随其后的代码看起来很可疑。数组尚未初始化(嗯......它已初始化,但已初始化为 NULL),但以下代码访问它:

th = pTheta->the_array[0];
于 2013-03-22T16:39:32.663 回答