메모리 누수 및 분할 오류가 발생하는 일반적인 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1610407

  •  05-07-2019
  •  | 
  •  

문제

메모리 누수 및 분할 오류 종류의 오류가 발생하는 일반적인 이유는 무엇입니까?

도움이 되었습니까?

해결책

segfaults :

  • 매달려 포인터 사용 : 거래 후 포인터를 재설정하지 않음
  • 사용하기 전에 포인터를 확인하지 마십시오
  • 변수/멤버를 초기화하지 않습니다

메모리/자원 누출 :

  • 리소스를 릴리스하는 것을 잊어
  • 쓰레기 수집가가있는 환경에서 : 참조 개체의 고리 만들기

감지/피하는 방법 :

  • 매달려 포인터 : 코딩 규칙, 거래 후 포인터를 엄격하게 재설정
  • 대부분의 segfaults를 피하려면 정적 코드 검사기를 사용하십시오
  • 동적 코드 분석기를 사용하여 리소스 누출이 멀리 있는지 확인하십시오.

다른 팁

메모리 누출: 일반적으로 이것은 메모리를 수동으로 관리하는 C와 같은 언어를 나타냅니다. 이 경우 메모리를 사용하면 메모리를 확보하지 않고 메모리를 할당 할 것입니다. 애플리케이션이 실행되는 동안 할당은 계속 쌓이고 프로세스가 실행 될 때까지 메모리를 해제 할 수 없습니다. 메모리 누출 (Wikipedia)

분할 결함: 이러한 유형의 오류의 가장 일반적인 이유는 존재하지 않거나 실행중인 실행 프로그램의 메모리가없는 메모리의 일부에 액세스하려고하기 때문입니다 (예 : OS가로드 된 메모리에 액세스하려고 시도한 경우 ). 일반적으로 이것은 예를 들어 나쁜 포인터를 사용하려고한다는 것을 의미합니다.

int* ptr;
...
...
...
*ptr = 5;

PTR은 널 포인터 (또는 쓰레기)이며 포인터가 가리키기 위해 메모리를 할당하지 않았기 때문에 segfault를 유발합니다. 세분화 결함 (Wikipedia)

많은 것 : :

  • 메모리 덩어리를 할당 한 다음 더 많이 사용하여 할당되었습니다.
  • 메모리를 할당하고 자유롭게하지 않음
  • 데이터 포인터를 올바르게 초기화하지 않음
  • Funciton 포인터를 올바르게 초기화하지 않음
  • 숫자가 잘못된 숫자 또는 매개 변수 값으로 함수를 호출합니다.
  • 널 포인터를 통해 읽거나 쓰려고 시도,
  • 라이브러리 또는 잘못된 라이브러리에 잘못 연결됩니다.

이 모든 것이 모든 언어에 적용되는 것은 아니지만 생각하기 시작하는 유용한 것들입니다.

당면한 문제에 대해 매우 유용한 Addison Wesley의 Effective C++ 시리즈를 참조하세요.포인터를 사용하려면 모든 요소를 ​​개별적으로 삭제한 다음 포인터를 삭제해야 합니다. 기술이 필요하며 종종 잘못되어 쉽게 표시되지 않는 숨겨진 오류가 발생합니다.다른 포스터에 답변이 있습니다. 추가 세부 사항만 추가하고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top