2013-06-01 4 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; 
} 

Но он дает ошибку во время выполнения во 2 allocate() вызова для линии delete names

Могу ли я что-то недоразумение?

+4

Почему бы не использовать 'std :: vector ' и 'resize'? – Andrei

ответ

2

Вы должны использовать delete [] names;, потому что вы хотите удалить массив строк, delete names; удаляет один объект.

2

Вы не можете вызвать delete names на массив, вы должны использовать

delete[] names 

вместо этого.

Как насчет использования std::vector<std::string> для вашей структуры данных names?

1

Когда вы выделяете память с помощью нового, вы можете использовать оператор delete, но при распределении памяти с помощью нового [], чтобы избежать утечки памяти, используйте оператор delete [], чтобы удалить память, выделенную для массива.

delete[] names 
Смежные вопросы