gpt4 book ai didi

python - 耦合 fortran/c++ 与在 python 中调用的指针给出了段错误(核心转储)错误

转载 作者:太空宇宙 更新时间:2023-11-04 12:51:39 25 4
gpt4 key购买 nike

我有一个耦合代码(fortran 和 c++),我现在在 python 中调用。 main.exe 工作正常,但是当我在 python 中调用耦合版本时,出现段错误(核心转储)错误。我确定了出现问题的代码行,显然它是由指针引起的。这是我的功能:

void emissionPrimSR(pTSysRac sR)
{
/* Emission de nouveaux axes primaires sur le système racinaire */

pTAxe nouvAxe;
int numPrim, nbPrimAEmettre;
r3 vInit, dirInit;
double angRot,angI;

//printf("\n EMISSION PRIM SR : postest0=%lf, postest1=%lf,postest2=%lf\n",postest0, postest1, postest2);

nbPrimAEmettre = calcNouvNbPrim() - sR->nbPrim; /* Nombre de primaires à émettre */

printf("nombre Adv à emettre %d \n",nbPrimAEmettre);//---- TO DO SUPPRIME LLab

for ((numPrim=1); (numPrim<=nbPrimAEmettre); (numPrim++)) /* Pour les nouvelles primaires à émettre */
{
printf("Je suis dans emissionPrimSR %3i \n",sR->nbPrim);
/* Calcul de la direction initiale de l'axe */
if (sR->nbPrim==0) angI=tireGaussien(0.0,0.1); // émission de la radicule qui a un gravitropisme initial fort
else angI=tireGaussien(P_angInitMoyVertPrim,P_angInitETVertPrim); // angle par rapport à la verticale
vInit[0]=sin(angI);
vInit[1]=0.0;
vInit[2]=cos(angI);
angRot=sR->angDep+tireAngRad();
rotZ(vInit,dirInit,angRot);

/* Génération de l'axe et intégration dans le système racinaire */

nouvAxe=initialiseAxe(sR->nbAxeForm+1,P_diamMax,sR->origine,dirInit,NULL,NULL,postest0, postest1, postest2);
ajouteAxeSR(sR,nouvAxe);
sR->nbPrim++;
}



}

所以,这一行给出了一个段错误:

    nbPrimAEmettre = calcNouvNbPrim() - sR->nbPrim;

函数 calcNouvNbPrim() 如下所示:

    int calcNouvNbPrim(void){ 
/* Calcul du nouveau nombre de primaires */

int nouvNbPrim;

// CB TEST printf("\n CALC NOUV NB PRIM - TEMPS = %d\n", temps);

nouvNbPrim=int (P_vitEmissionPrim*temps);

if (nouvNbPrim>=P_nbMaxPrim) nouvNbPrim=P_nbMaxPrim;

return nouvNbPrim;

} /* Fonction calcNouvNBPrim */

我做错了什么?

当我运行 gdb python 时,出现以下错误:

  Program received signal SIGSEGV, Segmentation fault.
0x00007ffff1f7f2e6 in emissionPrimSR (sR=0x0) at src/ArchiSimple.cpp:1586
1586 nbPrimAEmettre = calcNouvNbPrim() - sR->nbPrim; /* Nombre de primaires � �mettre */`

解决方案:

我必须将我的函数 C++ 和 fortran 分开,并在 Python 中分别调用它们。 f90wrap 无法处理 ISO_C_BINDING 函数。

最佳答案

解决方案:

我必须将我的函数 C++ 和 fortran 分开,并在 Python 中分别调用它们。 f90wrap 无法处理 ISO_C_BINDING 函数。

关于python - 耦合 fortran/c++ 与在 python 中调用的指针给出了段错误(核心转储)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48769793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com