2013-06-01 3 views
2

std::string 배열을 동적으로 할당하고 싶습니다. 할당 할 수있는 기능이 있습니다. 프로그램을 통해 원하는만큼 여러 번 함수를 호출 할 수 있습니다. 배열에 대한 포인터가 이미 할당되어 있으면 먼저 메모리를 해제 한 다음 새 메모리를 할당하려고합니다.동적으로 std :: string 배열을 할당하십시오.

std::string *names; 
bool already_allocated = false; 
void allocate(int n) 
{ 
    if(already_allocated) 
    { 
     delete names; 
    } 
    names = new std::string[n]; 
    already_allocated = true; 
} 

int main() 
{ 
    allocate(5); 
    allocate(6); 
    return 0; 
} 

그러나 delete names

내가 뭔가를 오해하고있는 라인 2 allocate() 호출 런타임 오류를주고있다 : 여기

내가 시도 무엇인가?

+4

'std :: vector '및'크기 조정 '을 사용하지 않는 이유는 무엇입니까? – Andrei

답변

2

문자열 배열을 삭제하기 때문에 delete [] names;을 사용해야합니다. delete names;은 단일 개체를 삭제합니다.

2

당신은 배열에 delete names를 호출 할 수 없습니다, 대신

delete[] names 

를 사용해야합니다.

대신 names 데이터 구조에 std::vector<std::string>을 사용하는 것이 어떻습니까?

1

새로운 것을 사용하여 메모리를 할당 할 때 delete 연산자를 사용할 수 있지만 새로운 []을 사용하여 메모리를 할당 할 때 메모리 누수가 발생하지 않도록하려면 delete [] 연산자를 사용하여 배열에 할당 된 메모리를 삭제하십시오.

delete[] names 
관련 문제