【发布时间】:2016-05-23 13:22:43
【问题描述】:
我的代码运行良好,最多 3 次迭代就可以得到正确的结果。但是,当我尝试运行以下代码时,在 3 次迭代后出现分段错误错误:
int addNode(double* distNewNode,int placeCount, int* phi,double* lambda)
{
int i ;
int nextPlaceCount = placeCount+1;
//int nodeCount = placeCount -1;
phi= realloc(phi,nextPlaceCount*sizeof(int));
lambda = realloc(lambda,nextPlaceCount*sizeof(double)); //This line throws the error
phi[placeCount] = placeCount;
lambda[placeCount] = DBL_MAX;
for (i = 0;i < placeCount; i++)
if (lambda[i] >= distNewNode[i])
{
if (lambda[i] <= distNewNode[phi[i]])
distNewNode[phi[i]] = lambda[i];
lambda[i] = distNewNode[i];
phi[i] = placeCount;
}
else if (distNewNode[i] < distNewNode[phi[i]])
distNewNode[phi[i]] = distNewNode[i];
for (i = 0;i < placeCount;i++)
if(lambda[i] >= lambda[phi[i]] )
phi[i] = placeCount;
return 1;
}
下面是我调用 addNode() 函数的方法:
int main()
{
//Create distMat here
int* phi;
phi = (int*)malloc(1);
phi[0] = 1;
//phi[1] = 1;
double* lambda;
lambda = (double*)malloc(1);
//lambda[0] = 1.2;
lambda[0] = DBL_MAX;
int isNodeAdded;
for (int placeCount=0; placeCount < 10;placeCount++)
{
double* temp =(double*) malloc(placeCount);
for (int j= 0;j < placeCount ;j++)
{
temp[j] = distMat[placeCount][j];
}
isNodeAdded = addNode(temp,placeCount,phi,lambda);
cout << "isNodeAdded: "<<isNodeAdded << endl;
free(temp);
for (int i=0;i < placeCount ;i++)
{
printf("Node= %d Pi = %d Lambda = %f \n",i,phi[i],lambda[i]);
}
}
}
我的输出是:
isNodeAdded: 1
isNodeAdded: 1
Node= 0 Pi = 1 Lambda = 1.200000
isNodeAdded: 1
Node= 0 Pi = 1 Lambda = 1.200000
Node= 1 Pi = 2 Lambda = 3.400000
isNodeAdded: 1
The program has unexpectedly finished.
【问题讨论】:
-
这不是 C !见How to Ask
-
main函数是C++,而addNode()函数是C。
-
除非你用C编译器编译,否则不是!阅读我提供的链接!并检查关键函数的结果!
-
你知道
realloc转换成addNode不会修改main函数中的指针.....? -
@LPs 前 3 次迭代会发生变化
标签: c++ pointers segmentation-fault