ERROR Double Free 또는 Corruption(아웃).

1599 단어 oopprogrammingcpp

이 기사에서는 "Double Free 또는 Corruption Error"라는 또 다른 오류에 대해 논의할 것입니다. 메모리 작업과 관련된 오류입니다. 이 오류에 대한 모든 설명과 솔루션은 미리 제공됩니다.



제목: "오류 Double Free 또는 Corruption(out)."
태그: cpp

canonical_url: https://kodlogs.com/blog/332/error-double-free-or-corruption-out


이중 무료 또는 손상 오류



프로그램의 Double Free 또는 Corruption Error 오류는 프로그램에 C 런타임 함수 free()가 있음을 의미합니다. C 런타임 함수인 free()는 실수로 호출되거나 잘못된 포인터로 호출될 수 있습니다. 이 모든 소란은 동적 메모리 할당을 사용하거나 free()를 직접 호출하여 발생할 수 있습니다.

원인



이 오류는 일반적으로 범위를 벗어난 배열 인덱스로 인해 코드가 메모리를 덮어쓴 경우 발생합니다. 추가 설명을 위해 이 예를 관찰할 수 있습니다.

!! Generates a "double free or corruption" error.
program free
  integer, dimension(:), allocatable :: data
  integer :: i

  allocate(data(5))
  do i = 1, 5
     data(i-1) = i
  end do
  deallocate(data)
end program free


이 코드를 컴파일하면 이 오류가 발생합니다.

./free: double free or corruption (out): 0x0000000000607590

해결책



이 문제를 해결하려면 문제가 어디에 있어야 하는지 추적해야 합니다. 이를 달성하는 방법은 유효하지 않은 배열 인덱싱을 확인하려면 -fbounds-check를 사용하여 프로그램을 컴파일하는 것입니다. 그런 다음 다시 실행할 때 범위를 벗어난 배열 인덱싱이 있으면 다음과 같은 오류 메시지가 표시됩니다.

% gfortran -fbounds-check -o free free.f90
% ./free 
At line 8 of file free.f90
Fortran runtime error: Array reference out of bounds for array 'data', lower bound of dimension 1 exceeded (0 < 1)```


This redirects us to a line of code. Here we can rewrite it and can change it to solve our issues.

좋은 웹페이지 즐겨찾기