내가이 코드를 가지고 있다고 가정 해 봅시다.함수에 의해 반환 된 포인터를 수동으로 삭제
int* Func(std::vector<int> integers)
{
for (int i : integers)
{
if (something)
{
return &i;
}
}
return nullptr;
}
int* x = Func({3, 4, 5, 6, 7});
delete(x); ???
'x'(nullptr이 아닌 경우)를 삭제해야합니까? 늘어나는만큼 우리는 연산자 'new'로 할당 된 메모리를 해제해야합니다. 이것은 분명히 여기에 해당하지 않습니다.
당신은 지역 변수에 대한 포인터를 반환하는 :
당신이 C++ (11)를 사용하고 있기 때문에, 여기에 당신이 달성하려고하는 생각입니다. 이것은 삭제 여부와 상관없이 정의되지 않은 동작입니다. 일반적으로 호출자가 삭제해야 할 수도있는 원시 포인터를 반환하는 함수는 없어야합니다. – juanchopanza
[로컬 변수의 메모리를 범위 외부에서 액세스 할 수 있습니까?] (http://stackoverflow.com/questions/6441218/can-a-local-variables-memory-be-accessed-outside-its-scope) – chris