Не понимаю как правильно присвоить новый адрес указателю аргументу функции
Есть код
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);
....
}