Не понимаю как правильно присвоить новый адрес указателю аргументу функции

Есть код

void func(BYTE* buffer, int bufferSize)
{
    BYTE bt = 2;
    BYTE* temp = (BYTE*)malloc(bufferSize + 1);
    for(int i = 0;i < bufferSize;i++)
    {
        temp[i] = bt;
    }
    free(buffer);
    buffer = (BYTE*)malloc(bufferSize + 1);
    memcpy(buffer, temp, bufferSize);
    free(temp)
}

int main()
{
    int bufferSize = 25;
    BYTE bt = 1;
    BYTE* buffer = (BYTE*)malloc(bufferSize + 1);
    for(int i = 0;i < bufferSize;i++)
    {
        buffer[i] = bt;
    }
    func(buffer, bufferSize);
    free(buffer);

}

Мне нужно что-бы в функции память в buffer была освобождена и выделена память а после в выделенную память была скопирована память из указателя temp. В функции всё срабатывает но при выходе из неё указатель buffer ниначто не указывает а при вызове команды free(buffer) крашиться программа. Я так понимаю я как-то неправильно выделяю память в функции для указателя buffer отсюда вопрос как нужно делать правильно что-бы всё работало?


Ответы (1 шт):

Автор решения: Harry

Как-то так, с передачей указателя (если у вас в самом деле С, а не С++. В С++ лучше malloc не использовать, не привыкать :)).

void func(BYTE** buffer, int bufferSize)
{
    ....
    free(*buffer);
    *buffer = malloc(bufferSize + 1);
    memcpy(*buffer, temp, bufferSize);
}

int main()
{
    ....
    func(&buffer, bufferSize);
    ....
}

Хотя лично мне больше нравится вариант

BYTE* func(BYTE* buffer, int bufferSize)
{
    ....
    return buffer;
}

int main()
{
    ....
    buffer = func(buffer, bufferSize);
    ....
}
→ Ссылка