Безопасно ли удалять void * byte byte? - PullRequest
0 голосов
/ 15 октября 2018

Поскольку я не очень много знаю о распределении памяти, я хотел бы знать, безопасно ли удалять блок последовательных байтов (массив), как этот.

void Free(void* ptr, size_t cbSize)
{
    if (cbSize == 0) return;
    if (ptr == NULL) return;

    for(size_t i = cbSize; i > 0; i--)
    {
        char* p = &((char*)ptr)[i];
        delete p;
    }

    char* p = (char*) (ptr);
    delete p;
}

Я пробовал этот методпри следующих обстоятельствах и не получил ошибки.

int* a = new int[100];
Free(a, 100 * sizeof(int));

int* a = (int*) malloc(100 * sizeof(int));
Free(a, 100 * sizeof(int));

1 Ответ

0 голосов
/ 15 октября 2018

Вы всегда удаляете то, что выделяете;точно и только что вы выделяете.Если вы new одна вещь, вы delete одна вещь.Тот факт, что «одна вещь» занимает больше одного байта, не имеет значения;вы delete что вы new.

Как я могу заставить мою функцию работать в этом случае?

Вы не можете.Вы new редактировали массив int с.Таким образом, вы должны delete массив int с.Типы имеют значение в C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...