다음을 통해 공유


C6279

경고 C6279: <variable>이(가) 스칼라 new를 사용해 할당되었지만 배열 delete []로 삭제되었습니다.

이 경고는 C++ 코드에서만 나타나며 호출하는 함수에서 스칼라 new 연산자를 사용해 메모리를 할당했지만 배열 delete [] 연산자를 사용해 일관성 없이 해제했음을 나타냅니다. 메모리를 스칼라 new로 할당한 경우 일반적으로 스칼라 delete로 해제해야 합니다.

이 경우 문제를 발생시킬 수 있는 원인으로는 적어도 세 가지가 있습니다.

  • 배열의 개별 개체에 대한 생성자는 호출되지 않았지만 소멸자는 호출되었습니다.

  • 전역 또는 클래스 전용 operator newoperator deleteoperator new[] 및 **operator delete[]**와 호환되지 않는 경우 예상치 못한 결과가 발생할 수 있습니다.

이 오류의 정확한 결과는 예측하기 어렵습니다. 생성자가 호출되지 않았기 때문에 초기화되지 않은 메모리 사용으로 인해 임의의 동작이나 충돌이 발생할 수 있습니다. 또는 연산자가 재정의된 상황에서는 메모리가 할당되어 충돌할 수 있습니다. 드문 경우지만 이러한 불일치가 중요하지 않을 수도 있습니다. 현재로서는 분석 도구에서 이러한 상황을 구별하지 못합니다.

예제

다음 코드에서는 이 경고를 발생시킵니다.

class A
{
  // members
};

void f ( )
{
  A *pA = new A;
  //code ...
  delete[] pA;
}

이 경고를 해결하려면 다음 코드를 사용합니다.

void f( )
{
  A *pA = new A;
  //code ...
  delete pA;
}