그래서 내가있어 코드 :왜 이것이 힙 손상을 수정합니까?
float **array = new float*[width + 1]; //old line was '= new float*[width]'
//Create dynamic 2D array
for (int i = 0; i < width; ++i) {
array[i] = new float[height + 1]; //old line was '= new float[height]'
}
//Hardcode 2D array for testing
for (int i = 0; i < height; ++i) {
for (int j = 0; j < width; ++j) {
array[i][j] = i + j;
}
}
//deallocate heap memory
for (int i = 0; i < width; ++i) {
delete [] array[i]; //Where corrupted memory error used to be
}
delete [] array;
(공식적으로, 나는 메모리를 하나의 블록을 할당하는 것이 더 효율적이 될 것입니다 알고,하지만 난 결코 이해하지 못할 것입니다 과학자들과 긴밀히 이유/방법을 작동 서버에서 실행되기 때문에 상사가 선호한다고 말합니다.)
제 질문은 왜 + 1/width + 1 높이가 손상된 메모리 문제를 해결합니까? 나는 여분의 공간이 널 터미네이터를위한 것이지만, 왜 그것이 필요한지 알고있다. 왜 높이와 너비가 같을 때 작동합니까?
SOLN : 내 배열을 채우면서 뒤로/내 높이를 가졌습니다 ... -.-; NPE에 감사드립니다. 메모리 오류 가을 발생한 위치
이delete [] array[i]; //Where corrupted memory error used to be
이되지 않습니다 :
프로그램에 다른 오류가 있습니다. 이것은 아닙니다. –
버퍼에 1을 추가하면 오류를 없애고 어딘가에 1 오류가 발생할 수 있습니다. 귀하의 예는 불완전하지만 우리는 더 이상의 조언을 드릴 수는 없습니다. 또한 ... 널 터미네이터가 필요한 이유를 잘 모르겠다. 'float' 배열은 확실히 그렇지 않습니다. –
'내 질문에 왜 높이 + 1/너비 + 1이 손상된 메모리 문제를 해결합니까? ' 당신이 한 일은 부패 버그를 프로그램의 다른 곳으로 옮기는 것이 었습니다. – PaulMcKenzie