我在 return 语句之前打印要返回的值,并告诉我的代码打印在函数调用之后立即返回的值。但是,在第一个打印语句之后和第二个打印语句之前,我遇到了分段错误(还值得注意的是,这种情况总是发生在第三次调用该函数时;从来没有第一次或第二次,也从来没有第四次或更晚)。我尝试打印出我正在处理的所有数据,以查看我的代码的其余部分是否做了一些可能不应该做的事情,但到目前为止我的数据看起来不错。这是函数:
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 值,然后在到达我调用该函数的位置之前在某处出现段错误,我这样做:
hPos = findHydrogen((&aminoAcid[i]), nPos, diff, totRead);
printf("%d\n", hPos);