는 I 내게 세그먼트 오류를 범 코드의 조각이 때 함수 loadRow (tmpPop, bestOf4Route, K, N);은 다섯 번째로 호출됩니다. 특히, 함수는 fro의 첫 번째 루프에서 올바르게 호출됩니다 (p = 3 일 때). 그것은 모든 k 값에 대해 모두 괜찮습니다. 이유를 모르겠지만 루프를 두 번 실행하면 (p = 7), 처음으로 k = 0이라고 부르면 매트릭 tmpPop에 액세스하려고 할 때 세그먼트 F가 반환됩니다.C 행렬 기능 세그먼트 오류
randperm(popSize,randomOrder);
for(p = 3;p<popSize;p+=4)
{
load_rtes(rtes,pop,randomOrder,n,p);
load_dists(dists,totalDist,randomOrder,p);
find_min(dists, 4,&m,&idx);
for(j=0;j<n;j++) bestOf4Route[j]=rtes[j][idx];
X = rand_range(1,5);
Y = rand_range(1,5);
for(k =0;k<4;k++) //Mutate the Best to get Three New Routes
{
loadRow(tmpPop,bestOf4Route,k,n);
switch(k)
{
case 1: //Flip
flipMutation(tmpPop,k,X,Y);
break;
case 2: //Swap
swapMutation(tmpPop,k,X,Y);
break;
case 3: //Slide
slideMutation(tmpPop,k,X,Y);
break;
}
}
loadnewPop(newPop,tmpPop,p,n);
}
함수이다
void loadRow(int **mat,int *array,int k,int size)
{
int j;
for(j=0;j<size;j++)
{
mat[j][k] = array[j];
}
}
매개 변수 :
popSize = 16
n= 8
// create 4 x N matrix
tmpPop = (int**)malloc(n * sizeof(int*));
if(tmpPop==NULL) return 1;
for (i = 0; i < n; i++) {
tmpPop[i] = (int*)malloc(4 * sizeof(int));
if(tmpPop[i]==NULL) return 1;
}
// Creates an array of n
bestOf4Route = (int*)malloc(n * sizeof(int));
if(bestOf4Route==NULL) return 1;
clear_array(bestOf4Route,n);
그녀는 디버깅 결과 :
00,401,865 loadRow (매트 = 0x3e1438 배열 = 0x3e1698, K = 0, 사이즈 = 8)
void load_rtes(int **rtes,int **pop,int *randomOrder, int n,int p)
{
int i,j,r;
for(i=p-3;i<=p;i++)
{
//thakes the i element of randomOrder and use it as index for the pop row
r=randomOrder[i];
// copy the pop row in rtes
for(j=0;j<n;j++)
{
rtes[j][i]=pop[j][r];
}
}
}
void randperm(int n,int *perm)
{
int i, j, t;
for(i=0; i<n; i++)
perm[i] = i;
for(i=0; i<n; i++) {
j = rand()%(n-i)+i;
t = perm[j];
perm[j] = perm[i];
perm[i] = t;
}
}
당신은 또한') (기능'load_rtes를 게시 할 수 있을까? 그것을 간접적으로 사용하여'tmpPop'을 채 웁니다. –
좋아, 질문에 추가했습니다! – Malo
그리고 지금은 ** 어떻게 든'loadRow' 기능과 상호 작용하는 코드의 우리 ** 모두 표시해야합니다 : 당신은'randomOrder'를 초기화 코드. –