Ubuntu と Windows で実行される小さな振動運動プログラムを作成しています。プログラムの一部(大部分)を完了した後、Windowsでテストしようとしましたが、正常に動作しました(Pelles Cで作業)次に、仮想マシン(VMwareワークステーション)で実行されているUbunutuコンピューターにデータをコピーしました。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つがすでに初期化されています。 3番目は間違っています:)」?