Динамическое распределение памяти для символьных массивов - PullRequest
2 голосов
/ 04 декабря 2011

Хорошо, я пытался изменить размер массива следующим образом:

if((editBufferCounter + 20) > editBufferSize)
{
    char* temp;
    temp = new char[editBufferSize + 5];

    strcpy(temp, editBuffer);

    delete[] editBuffer;

    editBufferSize *= 2;  

    editBuffer = new char[editBufferSize];

    strcpy(editBuffer, temp);

    delete[] temp;

}

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

Примечание: программа работает нормально, если я удалю строку delete[] temp;

Ответы [ 2 ]

4 голосов
/ 04 декабря 2011

У вашего editBuffer есть завершающий символ NUL? если нет, пожалуйста, замените strcpy на strncpy.

3 голосов
/ 04 декабря 2011

Ваша функция может быть упрощена до:

if ((editBufferCounter + 20) > editBufferSize)
{
    char* temp = new char[editBufferSize * 2];

    std::copy_n(editBuffer, editBufferSize, temp);

    delete[] editBuffer;

    editBufferSize *= 2;  

    editBuffer = temp;
}
...