2017-10-22 2 views
0

memcpy() 함수 만 사용하는 제한으로 배열의 내용을 다른 배열에 복제하려고합니다.memcpy()를 사용한 후에 메모리를 삭제해야합니까?

는 여기에 내 시도입니다 :

int source_array[3] = {1,2,3}; 
int destination_array[3]; 
memcpy(destination_array, source_array, sizeof(source_array) * 3); 

질문, 내가가 따라야 할 않는 프로그램 어떤 메모리 누수를 방지하기 닫을 때 중복 배열 삭제 []?

+0

'memcpy()'자체는 메모리 할당을하지 않습니다. – user0042

+3

'new'를'delete'하고'new []'를'delete []'합니다. 당신은'new'도'new []'도하지 않습니다. –

+0

소스 및 대상 배열은 모두 스택에 할당되며 범위를 벗어날 때 자동으로 할당이 해제됩니다. – VTT

답변

1

아니요!

new을 사용하여 아무 것도 할당하지 않았기 때문에 delete은 필요하지 않습니다.

int x[10]; 

void method() { 
    int y[10]; 
    int *z = new int[10]; 
    delete z; 
} 

제 선언, INT (X) [10] cppreference 의해 정의 된 정적 저장 기간을 사용하기 때문에 :


는 다음 코드 고려 상기 오브젝트의 저장을 할당의 " 프로그램은이 끝나면 시작되고 할당 해제됩니다. 개체의 인스턴스가 하나만 존재하며 전역 네임 스페이스를 포함하여 네임 스페이스 범위에서 선언 된 모든 개체에는이 저장 기간과 정적 또는 extern으로 선언 된 개체가 포함됩니다. " 객체는 둘러싸는 코드 블록의 시작 부분에 할당되고 끝에 할당이 해제됩니다. 모든 로컬 객체는 다음을가집니다. 저장 기간은 static, extern 또는 thread_local로 선언 된 것을 제외합니다. "

세 번째 int * z = new int [10]은 일반적으로 동적 메모리 할당이라고합니다. 동적 메모리 할당은 명시 적으로 해제해야합니다 ().

관련 문제