我在返回语句之前打印我正在返回的值,并告诉我的代码打印函数调用后立即返回的值.但是,在我的第一个print语句之后和第二个print语句之前,我得到了一个分段错误(也有趣的是,这总是在第三次调用函数时发生;从不是第一次或第二次,从不第四次或更晚).我尝试打印出我正在处理的所有数据,看看我的其余代码是否正在做一些它可能不应该做的事情,但到目前为止我的数据看起来很好.这是功能:
int findHydrogen(struct Amino* amino,int nPos,float* diff,int totRead) { struct Atom* atoms; int* bonds; int numBonds; int i; int retVal; int numAtoms; numAtoms = (*amino).numAtoms; atoms = (struct Atom *) malloc(sizeof(struct Atom) * numAtoms); atoms = (*amino).atoms; numBonds = atoms[nPos].numBonds; bonds = (int *) malloc(sizeof(int) * numBonds); bonds = atoms[nPos].bonds; for(i = 0; i < (*amino).numAtoms; i++) printf("ATOM\t\t%d %s\t0001\t%f\t%f\t%f\n",i + 1,atoms[i].type,atoms[i].x,atoms[i].y,atoms[i].z); for(i = 0; i < numBonds; i++) if(atoms[bonds[i] - totRead].type[0] == 'H') { diff[0] = atoms[bonds[i] - totRead].x - atoms[nPos].x; diff[1] = atoms[bonds[i] - totRead].y - atoms[nPos].y; diff[2] = atoms[bonds[i] - totRead].z - atoms[nPos].z; retVal = bonds[i] - totRead; bonds = (int *) malloc(sizeof(int)); free(bonds); atoms = (struct Atom *) malloc(sizeof(struct Atom)); free(atoms); printf("2 %d\n",retVal); return retVal; } }
正如我之前提到的,它在前两次运行时运行良好,第三次打印正确的retVal值,然后在它到达我调用函数的位置之前在某处出现seg故障,我这样做:
hPos = findHydrogen((&aminoAcid[i]),nPos,diff,totRead); printf("%d\n",hPos);