2012-04-09 4 views
2

for 루프에서 잘못된 점을 말해 줄 수 있습니까? 내가 그것을 실행할 때, 그것은 방해한다. 나는 내가있는 for 루프 그냥 중지 것으로 나타났습니다, 무엇이 잘못되었는지를보기 위해 디버깅하려고 :C++에서 2 차원 배열 삭제

#define MAX_POPULATION 64 
float **tr_pop;//Tournament candidates 
float **matingPool;//Mating pool 
tr_pop=new float *[m]; 
matingPool=new float *[m]; 
for(l=0;l<m+1;l++)//allocating 
{ 
    tr_pop[l]=new float[MAX_POPULATION]; 
    matingPool[l]=new float[MAX_POPULATION]; 
} 
for (int r = 0; r < row; ++r)//deleting 
{ 
delete [] matingPool[r];//Stops here (not ending program just frozen) 
delete [] tr_pop[r]; 
} 
delete [] tr_pop; 
delete [] matingPool; 

======= 확인을 클릭합니다.

가 난 그냥 MAX_POPULATION+1MAX_POPULATION를 변경하고 일 : 문제 해결하고자 ======= 여기

는 이유입니다.

for(l=0;l<m+1;l++) 
    { 
    tr_pop[l]=new float[MAX_POPULATION+1]; 
    matingPool[l]=new float[MAX_POPULATION+1]; 
    } 

때문에 다른 함수에서 나는 위반을하고 있던 생각 :

void crossover() 
{ 
int p1,p2,i,j;float tempBit; 
p1=m/3; 
p2=(2*m)/3; 
for(j=0;j<MAX_POPULATION;j++) 
{ 
    for(i=p1;i<p2;i++) 
    { 
    tempBit=matingPool[i][j]; 
    matingPool[i][j]=matingPool[i][j+1];//THE VIOLATION POINT (I THINK) 
    matingPool[i][j+1]=tempBit; 
    } 
    j++; 
} 

당신이 볼 수 있듯이, 루프의 끝에 j = MAX_POPULATION, 내가 MAX_POPULATION + 1에 도달하려고했다. 그래서 나는 열에 대한 할당을 변경하고 문제 해결 : 당신은 정의되지 않은 동작으로 실행중인

+7

''matingPool''과''tr_pop''이 어떻게 생성되었는지 알려주십시오. –

+0

@HeShiming이 완료되었습니다. –

+0

내부 배열의 모든 배열이 초기화 되었습니까? 삭제하기 전에 null이 아닌지 확인하십시오. –

답변

2

을 :

for(l=0;l<m+1;l++)//allocating 
{ 
    tr_pop[l]=new float[MAX_POPULATION]; 
} 

당신은 각 m 요소를 할당하고

for(l=0;l<m;l++)//allocating 
{ 
    tr_pop[l]=new float[MAX_POPULATION]; 
} 

한다 배열을 열고 m+1에 액세스 해보십시오.

+0

이 있으면 문제가 없습니다. 그것은 단지 작동합니다. 내 문제는 "r"루프에 있습니다. –

+1

@WhoCares :'l' 루프가 _wrong_이기 때문에'r' 루프에 문제가 있습니다. (그리고'행'과 같은 잠재적으로 다른 것들, 그리고'm'과 어떻게 관련이 있나?) – Mat

+0

@Mat 여러분이 말한 것처럼 "l"루프를 바꿨습니다. 여전히 같은. 그것은 배열의 배열을 삭제하지 않습니다. 또한 "r"루프의 시작 부분에서 인터럽트 (실제로는 인터럽트가 아닌 그냥 고정)됩니다. 그래서 문제는 할당하지 않는다고 생각합니다. 최소한 tr_pop [0]에서 tr_pop [m-1]까지 삭제해야합니다. 나는 여기에 뭔가 다른 점이 있다고 생각한다. –

1
당신은 메모리를 할당하면서 m float*하지만이 for 루프에서 당신이 0..m-1에서 정상적으로, 0..m에서 반복되는 할당된다

. 이를 위해 for 루프를 변경해야합니다 : for(l=0;l<m;l++).